I have a strange issue, and googling is finding me everything that is the opposite of this.
I have a need to pass some parameters globally to all JRE instances. To do this, I tested using _JAVA_OPTIONS
as a SYSTEM environment variable on Windows. I then ran java -version
and saw that Java indicated it picked up the _JAVA_OPTIONS variable. Excellent. Done. I cleaned up my test case and went on with my day.
I passed this info on to another team, who could not reproduce the results. It’s now been several days and I’m trying to reproduce the results above. Unfortunately, I don’t remember what VM or little details about how exactly I tested the other day. Perhaps I installed an older version of 8 previously? I do remember that java was running from a different path. I’ve tested on Windows 10 and Windows 11 and for some reason, java will not indicate that it sees _JAVA_OPTIONS
. What am I missing?
>echo %_JAVA_OPTIONS%
-Djavax.net.ssl.trustStoreType=WINDOWS-ROOT
>where java
C:Program Files (x86)Common FilesOracleJavajava8pathjava.exe
>java -version
java version "1.8.0_421"
Java(TM) SE Runtime Environment (build 1.8.0_421-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.421-b09, mixed mode)
A couple of updates..
- I tried
JAVA_TOOL_OPTIONS
as well, and it didn’t work. - I also tried running java directly from the
C:Program FilesJavajre1.8.0_421binjava.exe
path. No fix. - It’s unlikely I was running a different version on my previous test. This is really throwing me for a loop as it just worked as intended previously.
- I ran Process Monitor and even confirmed in the “Process Start” operation for java.exe that the
_JAVA_OPTIONS
environment variable was present.
12
Are you really sure there is an issue? I have installed Oracle JRE 421. A quick test:
set JAVA_TOOL_OPTIONS="-Dtest1=Set by JAVA_TOOL_OPTIONS"
set _JAVA_OPTIONS="-Dtest2=Set by _JAVA_OPTIONS"
Then run with a few Java versions – all of them pick up the two variables above. The only difference is that no warnings are printed by the Oracle JRE8 update421, all others tested are OpenJDK and they warn about the use of JAVA_TOOL_OPTIONS and _JAVA_OPTIONS:
C:>"Program FilesJavajre1.8.0_421binjava.exe" -XshowSettings:all 2>&1 | findstr test
test1 = Set by JAVA_TOOL_OPTIONS
test2 = Set by _JAVA_OPTIONS
C:>"C:Program Files (x86)Common FilesOracleJavajava8pathjava.exe" -XshowSettings:all 2>&1 | findstr test
test1 = Set by JAVA_TOOL_OPTIONS
test2 = Set by _JAVA_OPTIONS
C:>javajdk-11.0.0.1binjava.exe -XshowSettings:all 2>&1 | findstr test
Picked up JAVA_TOOL_OPTIONS: "-Dtest1=Set by JAVA_TOOL_OPTIONS"
Picked up _JAVA_OPTIONS: "-Dtest2=Set by _JAVA_OPTIONS"
test1 = Set by JAVA_TOOL_OPTIONS
test2 = Set by _JAVA_OPTIONS
C:>javajdk-14binjava.exe -XshowSettings:all 2>&1 | findstr test
Picked up JAVA_TOOL_OPTIONS: "-Dtest1=Set by JAVA_TOOL_OPTIONS"
Picked up _JAVA_OPTIONS: "-Dtest2=Set by _JAVA_OPTIONS"
test1 = Set by JAVA_TOOL_OPTIONS
test2 = Set by _JAVA_OPTIONS
C:>javajdk-17binjava.exe -XshowSettings:all 2>&1 | findstr test
Picked up JAVA_TOOL_OPTIONS: "-Dtest1=Set by JAVA_TOOL_OPTIONS"
Picked up _JAVA_OPTIONS: "-Dtest2=Set by _JAVA_OPTIONS"
test1 = Set by JAVA_TOOL_OPTIONS
test2 = Set by _JAVA_OPTIONS
C:>javajdk-21binjava.exe -XshowSettings:all 2>&1 | findstr test
Picked up JAVA_TOOL_OPTIONS: "-Dtest1=Set by JAVA_TOOL_OPTIONS"
Picked up _JAVA_OPTIONS: "-Dtest2=Set by _JAVA_OPTIONS"
test1 = Set by JAVA_TOOL_OPTIONS
test2 = Set by _JAVA_OPTIONS
C:>javajdk-23binjava.exe -XshowSettings:all 2>&1 | findstr test
Picked up JAVA_TOOL_OPTIONS: "-Dtest1=Set by JAVA_TOOL_OPTIONS"
Picked up _JAVA_OPTIONS: "-Dtest2=Set by _JAVA_OPTIONS"
test1 = Set by JAVA_TOOL_OPTIONS
test2 = Set by _JAVA_OPTIONS
1