强制执行Java最低版本以与“一起运行”;java-版本:<;价值>&引用;不';我不能在Windows上工作

强制执行Java最低版本以与“一起运行”;java-版本:<;价值>&引用;不';我不能在Windows上工作,java,windows,version,Java,Windows,Version,我想强制执行我的应用程序应该运行在1.6或更高版本(即1.6+)上的JVM的最低版本。我的理解是,您可以使用“-version:”命令行参数来实现这一点。我试过了,它在Linux下似乎工作得很好,但在Windows下却不行 LINUX 我在Linux机器上安装了JDK版本1.6.021。$JAVA_HOME和$PATH环境变量已设置为它们应该设置的值 我运行了以下命令: $ java -version:1.6+ -version java version "1.6.0_21" Java(TM)

我想强制执行我的应用程序应该运行在1.6或更高版本(即1.6+)上的JVM的最低版本。我的理解是,您可以使用“-version:”命令行参数来实现这一点。我试过了,它在Linux下似乎工作得很好,但在Windows下却不行

LINUX

我在Linux机器上安装了JDK版本1.6.021。$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+"
$ 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+"
一切似乎都在预料之中。“version:1.6+”和“version:1.5+”应该可以工作,因为我安装了JDK1.6.0_21,“version:1.7+”不应该工作,因为我没有安装JDK1.7

窗口

我在Windows机器上安装了相同的JDK版本1.6.021(更具体地说是Windows 7)。%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+"
$ 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+"
每次执行都有一个错误

  • 有人能解释为什么相同的命令行参数在Linux上有效,但在Windows上无效吗?这是一个特性还是一个bug

  • 我能做些什么来修复/解决它?我希望尽可能在Linux和Windows上应用相同的命令行参数,因此不必为Linux指定不同的“-version:”参数,为Windows指定另一个不同的参数


谢谢。

用Java怎么样

String java = System.getProperty("java.specification.version");
double version = Double.valueOf(java);
if (version < 1.6) {
    // Exit
}
stringjava=System.getProperty(“java.specification.version”);
double version=double.valueOf(java);
如果(版本<1.6){
//出口
}
  • 有人能解释为什么相同的命令行参数在Linux上有效,但在Windows上无效吗?这是一个特性还是一个bug
我不认为这与Linux与Windows有关,而是特定发行版的问题-我现在可以在Windows上使用Oracle JDK运行这一功能,即Sun JDK的继任者(通过PowerShell或CMD):

相反,我在使用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+"
简短的搜索揭示了以下一些不确定的问题:

    • 引用链接断开,当前链接断开;无论如何,我目前无法看到引用的文档如何解决这个问题
    • 这似乎暗示了发行版的细节,实际上Ubuntu 12.04 LTS也是如此

我已经证实,在Ubuntu 13.10和Amazon Linux 2013.09.2上,OpenJDK 6/7仍然会破坏这一点,因此我建议尝试使用不同的OpenJDK发行版或JDK供应商,以防这个问题普遍存在——这肯定是一个奇怪的问题,特别是考虑到OpenJDK是最常见的错误。

至少在Sun实现中,这不是一个已知的错误。您(在Windows下)的“java-version”输出是什么?我觉得不错。Win7<代码>C:\>java-版本:1.6+-版本java-版本“1.6.0_25”java(TM)SE运行时环境(构建1.6.0_25-b06)java热点(TM)64位服务器VM(构建20.0-b11,混合模式)@jkraybill“java-版本”输出:java版本“1.6.0_21”java(TM)SE运行时环境(构建1.6.0_21-b06)java热点(TM)64位服务器VM(构建17.0-b16,混合模式)@user802421这很奇怪。你能检查一下你是否分别安装了JDK和JRE吗?在我的情况下,我只安装了一个JDK,其中包括一个JRE。Alos,你设置了哪些与Java相关的环境变量?我有JDK和JRE,但我使用的是JDK中的一个。%Java\u HOME%=C:\Program Files\Java\jdk1.6.0_25%PATH%包含%JAVA\u HOME%我让它在Windows下使用64位Java8,但不使用32位Java8(“在程序文件(x86)”中)。似乎是个bug?天哪,'-version'选项没有得到广泛的实现,这让我很难过。在Ubuntu上,对于我可以使用的所有Java版本,它都失败了,例如,'$/usr/lib/jvm/Java-8-oracle/bin/Java-version:1.8+-jar bfg.jar'gives'错误:无法找到符合规范的JRE“1.8+”在从Oracle下载的Windows上使用64位JDK1.8对我来说不起作用。他们为什么不解决这个问题?