Does Java have a default System Environment Variable that will always be read/appended when we set it? CATALINA_OTPS/JAVA_OPTS etc seems only for TOMCAT/JBOSS etc.
- I do not want to set it through Java system properties (which is passed in via -Dprop1=value1 -Dprop2=value2) as it involves shell/batch script.
- It should work across OS, like double click jar file in Windows.
- It should work across different JREs (Sun, IBM, OpenJDK etc).
- It should not involve extra coding.
- It should work in most libraries configuration file, like setting log4j
level ${LOG_LEVEL}.
Update: Added item # 4 and 5. Remove OS from title to make my question clearer.
Update 2: After looking at Perception’s answer, it seems like my item 2 and 3 can be achieved via System.getenv. How to achieve item 4 and 5?
Here is example of scenario:
Imagine now JAVA_DEFAULT_OPTS is an environment variable that will be read by Java as it has now become the standard. On development desktop machine, I set JAVA_DEFAULT_OPTS=-DLOG_LEVEL=DEBUG -Xmx384m; On production server machine, customers set JAVA_DEFAULT_OPTS=-DLOG_LEVEL=INFO -Xmx1024m. When I/users double click the jar file on Windows, the application will run will different log4j level and max memory heap size.
There is a special environment variable called
_JAVA_OPTIONS, its value will be picked up by the JVM (java.exe).In Windows:
In Linux:
For Java Web Start it’s
JAVAWS_VM_ARGS. For javaw.exe (Applet), it’s_JPI_VM_OPTIONS.edit 20201213
_JAVA_OPTIONSenvironment variable was ok but was not documented or supported.Since it is not standardized, other vendors have their own names e.g.
IBM_JAVA_OPTIONS. Leading underscore names are private by convention so it’s not a good idea to standardize the usage of_JAVA_OPTIONS.That’s why
JAVA_TOOL_OPTIONSshould be the preferred choice.ref : https://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#tooloptions