Несколько версий Java, работающих одновременно под Windows

84

У нас есть несколько приложений, работающих на Java 5, и теперь мы хотели бы представить приложение, основанное на Java 6. Могут ли обе версии java работать вместе под Windows?

Есть ли какая-либо панель управления для установки соответствующей версии Java для различных приложений или какой-либо другой способ настройки, какая версия Java будет использоваться для запуска этого конкретного приложения?

Даниэль Станка
источник

Ответы:

60

Конечно, вы можете использовать несколько версий Java под Windows. И разные приложения могут использовать разные версии Java. Как ваше приложение запускается? Обычно у вас есть командный файл, в котором есть что-то вроде

java ...

Это будет искать исполняемый файл Java с использованием переменной PATH. Таким образом, если Java 5 находится первой в PATH, у вас возникнут проблемы с запуском приложения Java 6. Затем вы должны изменить пакетный файл, чтобы использовать определенную версию Java, например, определив переменную среды JAVA6HOMEсо значением C:\java\java6(если Java 6 установлена ​​в этом каталоге) и измените вызов пакетного файла

%JAVA6HOME%\bin\java ...
действительно безумный
источник
9
В Windows, чтобы остановить установку Java, заменяющую вашу существующую (первую установленную) установку Java, вы должны передать ей аргумент STATIC = 1, т.е. запустить из командной строки "jre-6u24-windows-i586-s.exe / STATIC = 1"
Том Чивертон
4
Когда я выполняю "jdk-6u27-windows-x64.exe / STATIC = 1" в Windows 7 64, он не устанавливается, а просто вызывает всплывающее окно, показывающее использование msiexec.
yetimoner
7
Согласно этому документу Oracle, это действительно так jdk-...exe STATIC=1. Я попробовал это, и это сработало.
Мэтт
1
Ребята, вы путаете JDK и JRE. JRE принимает в STATICкачестве аргумента, но делает ли JDK тоже?
Даниэль
1
@reallyinsane Я не могу этого понять. Ответ не упрощен для новичка. Можете ли вы связать меня с полным руководством?
ar plusplus
12

Абсолютно возможно установить несколько версий JRE / JDK бок о бок. Более того, вам не нужно делать ничего особенного, чтобы это произошло, поскольку Sun создает отдельную папку для каждой из них (в разделе Program Files).

Нет панели управления, чтобы проверить, какая JRE работает для каждого приложения. По сути, JRE, которая будет работать, будет первой в вашей переменной среды PATH. Вы можете изменить это, или переменную JAVA_HOME, или создать определенные файлы cmd / bat для запуска желаемых приложений, каждое с другим JRE в пути.

Моше
источник
2
Я не верю, что это верно для Windows.
cmcginty
@Casey, о какой части ты говоришь? Почему это неправда?
Pacerier
1
Этот ответ объясняет проблему. Реестр Windows используется для поиска версии java по умолчанию.
binarysubstrate
Хотя часто верно, что программа Java будет нормально работать на новой версии Java, отличной от той, для которой она была разработана, нет никаких гарантий. Кроме того, в большинстве случаев необходимо обновить переменную среды JAVA_HOME.
Патрик О'Хара
11

Я был потрясен неуклюжестью идей CLASSPATH, JAVA_HOME и PATH в Windows для отслеживания файлов Java. Я попал сюда из-за нескольких JRE и того, как этим довольствоваться. Не повторяя информации от парня, гораздо более умного, чем я, я бы предпочел указать на его статью по этому вопросу, которая, на мой взгляд, решает ее отлично.

Автор статьи: Тед Ньюард: Несколько домов Java: предоставление Java-приложений собственной JRE

С экспоненциальным ростом Java как языка разработки на стороне сервера последовал эквивалентный экспоненциальный рост инструментов, сред, сред и расширений разработки Java. К сожалению, не все эти инструменты хорошо работают вместе при одной установке Java VM. Некоторым требуется среда, совместимая с Servlet 2.1, некоторым - 2.2. Некоторые работают только под JDK 1.2 или выше, некоторые под JDK 1.1 (и не выше). Некоторым требуются пакеты "com.sun.swing" из дней до Swing 1.0, другим требуются имена пакетов "javax.swing".

Что еще хуже, эта проблема может быть обнаружена даже на корпоративном предприятии, поскольку системы, разработанные с использованием Java всего шесть месяцев назад, могут внезапно «не работать» из-за установки некоторого расширения Java, необходимого для новой (казалось бы, несвязанной) версии приложения. Это может усложнить развертывание Java-приложений в корпорации и заставить клиентов задуматься, почему, спустя пять лет после начала печально известных проблем «Установка-это-приложение-ломает-мою-систему», начавшихся с схемами DLL Microsoft, мы все еще не знаем. дальше этого не продвинулась. (Фактически, новая инициатива .NET направлена ​​на решение только что описанной печально известной проблемы «DLL-Hell».)

В этом документе описывается, как настроить установку Java так, чтобы данное приложение получало собственную частную JRE, позволяющую сосуществовать нескольким средам Java, не сводя с ума клиентов (или системных администраторов) ...

Дрикус
источник
8
Я думаю, что ссылка, указанная в ответе выше, больше не существует. Я нашел ту же статью здесь docplayer.net/…
Алок Мишра
4

Должна быть возможность изменять настройку переменной среды JAVA_HOME по-разному для конкретных приложений.

При запуске из командной строки или из пакетного сценария вы можете использовать set JAVA_HOME=C:\...\j2dskXXXдля изменения среды JAVA_HOME.

Возможно, вам также потребуется изменить PATHпеременную среды, чтобы использовать правильный двоичный файл java. Для этого можно использовать set PATH=%JAVA_HOME%\bin;%PATH%.

Рубен
источник
4

С помощью SDKMan мы можем установить несколько версий комплектов для разработки Java на одном компьютере.

Некоторые особенности SDKMan следующие:

  1. SDKMan можно использовать бесплатно, и он разработан сообществом с открытым исходным кодом.
  2. SDKMan написан на bash и требует, чтобы в вашей системе присутствовали только программы curl и zip / unzip .
  3. SDKMan может установить около 29 комплектов разработки программного обеспечения для JVM, таких как Java, Groovy, Scala, Kotlin и Ceylon. Ant, Gradle, Grails, Maven, SBT, Spark, Spring Boot, Vert.x.
  4. Нам не нужно беспокоиться об установке переменных среды _HOMEи, PATHпотому что SDKMan обрабатывает это автоматически.

SDKMan может работать на любых платформах на базе UNIX, таких как Mac OSX, Linux, Cygwin, Solaris и FreeBSD, и мы можем установить его, используя следующие команды:

$ curl -s "https://get.sdkman.io" | bash  
$ source "$HOME/.sdkman/bin/sdkman-init.sh" 

Потому что SDKMan написан на bash и требует, чтобы в вашей системе присутствовали только curl и zip / unzip . Вы также можете установить SDKMan в Windows, сначала установив Cygwin или Git Bash для среды Windows, а затем выполнив указанные выше команды.

Команда sdk list javaпредоставит нам список версий java, которые мы можем установить с помощью SDKMan.

Установка Java 8

$ sdk install java 8.0.201-oracle

Установка Java 9

$ sdk install java 9.0.4-open 

Установка Java 11

$ sdk install java 11.0.2-open

Удаление версии Java

Если вы хотите удалить любую версию JDK, например, 11.0.2-open, вы можете сделать это следующим образом:

$ sdk uninstall java 11.0.2-open

Смена текущей версии Java

Если вы хотите активировать одну версию JDK для всех терминалов и приложений, вы можете использовать команду

sdk default java <your-java_version>

Вышеупомянутые команды также автоматически обновят переменные PATH и JAVA_HOME. Вы можете прочитать больше в моей статье Как установить несколько версий Java на одном компьютере .

Нареш Джоши
источник
1
это для пользователей, отличных от Windows.
gumuruh
@gumuruh Вы также можете установить его в Windows, потому что SDKMan написан на bash и требует, чтобы в вашей системе присутствовали только curl и zip / unzip. Вы также можете установить SDKMan в Windows, сначала установив Cygwin или Git Bash для среды Windows, а затем выполнив указанные выше команды.
Нареш Джоши
2

Вызов Java с "java -version: 1.5" и т. Д. Должен работать с правильной версией Java. (Очевидно, замените 1.5 желаемой версией.)

Если Java правильно установлена ​​в Windows, существуют пути к виртуальной машине для каждой версии, хранящейся в реестре, который она использует, поэтому вам не нужно возиться с версиями среды в Windows.

jcoder
источник
Я считаю, что это работает только с "общедоступными" JRE. Отлично работает на клиентских машинах, немного неудобно для разработчиков, которые не устанавливают общедоступную JRE. Намного лучше, чем командный файл.
Джеймс Шек
2

Или используйте ссылки. Хотя обновлять PATH в работающей среде довольно неприятно, легко воссоздать ссылку на новую версию JRE / JDK. Так:

  • установите разные версии JDK, которые вы хотите использовать
  • создать ссылку на эту папку с помощью соединения или встроенной команды mklink
  • установите ПУТЬ на ссылку
  • Если должна использоваться другая версия java, удалите ссылку, создайте новую, PATH / JAVA_HOME / жестко запрограммированные скрипты останутся нетронутыми
jan.supol
источник
1

Если вы используете Java Web Start (вы можете запускать приложения с любого URL-адреса, даже с локальной файловой системы), он позаботится о поиске правильной версии для вашего приложения.

Питер Лоури
источник
0

Используя Java Web Start, вы можете установить несколько JRE, а затем вызывать то, что вам нужно. В случае победы вы можете создать файл .bat:

1- онлайн-версия: < your_JRE_version \ bin \ javaws.exe> ​​-localfile -J-Djnlp.application.href = < URL-адрес файла .jnlp .jnlp> -localfile -J "< path_temp_jnlp_file_ .jnlp>"

2- запуск из кеша: < your_JRE_version \ bin \ javaws.exe> ​​-localfile -J "< path_of_your_local_jnlp_file .jnlp>"

eliana_zulato
источник