强制Java最低版本与"java -version:<value>"一起运行在Windows上不起作用

His*_*His 9 java windows version

我想强制执行应用程序运行的最小版本的JVM到1.6或更高(即1.6+).我的理解是你可以使用"-version:"命令行参数来完成这个.我试过了,它似乎在Linux下运行良好但在Windows下运行不正常.

LINUX

我在Linux机器上安装了JDK版本1.6.0_21.$ JAVA_HOME和$ PATH环境变量已设置为它们应该是什么.

我运行了以下内容:

$ java -version:1.6+ -version
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b16, mixed mode)

$ java -version:1.5+ -version
java version "1.6.0_21"
Java(TM) SE Runtime Environment (build 1.6.0_21-b06)
Java HotSpot(TM) 64-Bit Server VM (build 17.0-b16, mixed mode)

$ java -version:1.7+ -version
Unable to locate JRE meeting specification "1.7+"
Run Code Online (Sandbox Code Playgroud)

一切似乎都在预料之中."版本:1.6+"和"版本:1.5+"应该可以工作,因为我安装了JDK 1.6.0_21,而"版本:1.7+"不应该因为我没有安装JDK 1.7.

视窗

我在Windows机器上安装了相同的JDK版本1.6.0_21(Windows 7更具体).%JAVA_HOME%和%PATH%环境变量已设置为它们应该是什么.

我运行了以下内容:

$ java -version:1.6+ -version
Unable to locate JRE meeting specification "1.6+"

$ java -version:1.5+ -version
Unable to locate JRE meeting specification "1.5+"

$ java -version:1.7+ -version
Unable to locate JRE meeting specification "1.7+"
Run Code Online (Sandbox Code Playgroud)

每次执行都出错了.

  • 任何人都可以解释为什么相同的命令行参数在Linux上有效,但在Windows上却无效?这是一个功能还是一个bug?

  • 我该怎么做才能解决/解决它?我希望尽可能在Linux和Windows上应用相同的命令行参数,因此我不必为Linux指定不同的"-version:"参数,而为Windows指定另一个不同的参数.

谢谢.

Ste*_*pel 5

  • 任何人都可以解释为什么相同的命令行参数在Linux上有效,但在Windows上却无效?这是一个功能还是一个bug?

我不认为它与Linux与Windows相关,而不是特定发行版的问题 - 我现在可以在Windows上使用Oracle JDK运行它,即Sun JDK的后续版本(通过PowerShell或CMD):

PS> java -version:1.7+ -version
java version "1.7.0_45"
Java(TM) SE Runtime Environment (build 1.7.0_45-b18)
Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode)
Run Code Online (Sandbox Code Playgroud)

相反,在使用OpenJDK的Ubuntu 12.04 LTS上,它失败了:

$ java -version
java version "1.7.0_51"
OpenJDK Runtime Environment (IcedTea 2.4.4) (7u51-2.4.4-0ubuntu0.12.04.2)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)
$ java -version:1.7+ -version
Error: Unable to locate JRE meeting specification "1.7+"
Run Code Online (Sandbox Code Playgroud)

简短的搜索揭示了以下几个不确定的问题:

我已经确认在Ubuntu 13.10以及Amazon Linux 2013.09.2上仍然打破了OpenJDK 6/7,所以我建议尝试使用不同的OpenJDK发行版或JDK供应商,以防这个问题普遍存在 - 这肯定是一个奇怪的问题,尤其是 同时,OpenJDK是官方的Java SE 7参考实现.

  • 在从Oracle下载的Windows上使用64位JDK 1.8时,它不起作用.他们为什么不解决这个问题? (3认同)
  • 天哪,让我感到难过的是'-version'选项没有被广泛实施.在Ubuntu上,我无法使用所有版本的Java,我可以放手 - 例如'$/usr/lib/jvm/java-8-oracle/bin/java -version:1.8+ -jar bfg.jar'给出'错误:无法找到JRE会议规范"1.8+"' (2认同)

use*_*421 4

用Java 做怎么样?

String java = System.getProperty("java.specification.version");
double version = Double.valueOf(java);
if (version < 1.6) {
    // Exit
}
Run Code Online (Sandbox Code Playgroud)