Применение минимальной версии Java для запуска с «java -version: <value>» не работает в Windows - PullRequest
9 голосов
/ 21 июля 2011

Я хочу установить минимальную версию JVM, в которой мое приложение должно работать до версии 1.6 или выше (то есть 1.6+).Насколько я понимаю, вы можете сделать это, используя аргумент командной строки "-version:".Я попробовал его, и, похоже, он отлично работал в Linux, но не в Windows.

LINUX

У меня установлена ​​версия JDK 1.6.0_21 на компьютере с Linux.Переменные среды $ 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+"

Все, как и следовало ожидать.«версия: 1.6+» и «версия: 1.5+» должны работать, потому что у меня установлен JDK 1.6.0_21, а «версия: 1.7+» не должна, потому что у меня не установлен JDK 1.7.

WINDOWS

У меня установлена ​​та же версия JDK 1.6.0_21, установленная на компьютере Windows (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+"

Я получил ошибку при каждом выполнении.

  • Может кто-нибудь объяснить, почему один и тот же аргумент командной строки работает в Linux, но не в Windows?Это функция или ошибка?

  • Что я могу сделать, чтобы исправить / обойти это?Насколько это возможно, я хочу, чтобы в Linux и Windows применялись одинаковые аргументы командной строки, поэтому мне не нужно указывать другой аргумент "-version:" для Linux и другой другой аргумент для Windows.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 24 января 2014
  • Кто-нибудь может объяснить, почему один и тот же аргумент командной строки работает в Linux, но не в Windows?Это функция или ошибка?

Я не думаю, что это связано с 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)

Наоборот, он не работает для меня в Ubuntu 12.04 LTS с OpenJDK:

$ 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+"

Краткий поиск выявляет следующие несколько неубедительные проблемы:

Я подтвердилэто все еще не работает с OpenJDK 6/7 в Ubuntu 13.10, а также в Amazon Linux 2013.09.2, поэтому я предлагаю поэкспериментировать с другим дистрибутивом OpenJDK или поставщиком JDK, в случае, если эта проблема распространена - это определенно странная проблема, esp,данный OpenJDK является официальной реализацией Java SE 7 .

3 голосов
/ 21 июля 2011

Как на счет Java?

String java = System.getProperty("java.specification.version");
double version = Double.valueOf(java);
if (version < 1.6) {
    // Exit
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...