Кілька версій Java працюють одночасно під Windows


83

У нас є кілька додатків, що працюють на 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"
Tom Chiverton

4
Коли я роблю "jdk-6u27-windows-x64.exe / STATIC = 1" у Windows 7 64, він не встановлюється, він просто відкриває спливаюче вікно, що показує використання msiexec.
yetimoner

7
Згідно з цим документом від Oracle це насправді jdk-...exe STATIC=1. Я спробував це, і це спрацювало.
Matt

1
Хлопці, ви плутаєте JDK і JRE. JRE дійсно приймає STATICяк аргумент, але чи також JDK?
Danijel

1
@reallyinsane Я не можу цього зрозуміти. Відповідь для новачків не спрощена. Чи можете ви прив'язати мене до повного підручника?
CodingOnSteroid

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/…
Алок Мішра

3

Ми можемо встановити кілька версій наборів для розробки Java на одній машині за допомогою SDKMan.

Деякі моменти щодо SDKMan такі:

  1. SDKMan є безкоштовним у користуванні, і він розроблений спільнотою з відкритим кодом.
  2. SDKMan написано на bash, і для цього потрібно лише, щоб програми curl та zip / unzip були присутніми у вашій системі.
  3. SDKMan може встановити близько 29 наборів для розробки програмного забезпечення для JVM, таких як Java, Groovy, Scala, Kotlin та Цейлон. Мураха, Градл, Грааль, Maven, SBT, Іскра, Весняний черевик, 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 на одній машині .


це для користувачів, які не користуються Windows.
гумуру

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

2

Має бути можливим інший зміна налаштування змінної середовища JAVA_HOME для конкретних програм.

Починаючи з командного рядка або з пакетного сценарію, ви можете використовувати set JAVA_HOME=C:\...\j2dskXXXдля зміни середовища JAVA_HOME.

Можливо, вам також потрібно змінити PATH змінну середовища, щоб використовувати правильний двійковий файл Java. Для цього ви можете використовувати set PATH=%JAVA_HOME%\bin;%PATH%.


2

Виклик Java із "java -version: 1.5" тощо повинен виконуватися з правильною версією Java. (Очевидно, замініть 1.5 на потрібну версію.)

Якщо Java правильно встановлена ​​в Windows, до кожної версії, що зберігається в реєстрі, який вона використовує, є шляхи до vm, тому вам не потрібно возитися з версіями середовища в Windows.


Я вважаю, що це працює лише з "Public" JRE. Відмінно працює на клієнтських машинах, трохи боляче для розробників, які не встановлюють загальнодоступну JRE. Набагато краще, ніж пакетний файл.
Джеймс Шек,

2

Або скористайтеся посиланнями. Хоча оновлювати PATH в робочому середовищі досить неприємно, легко відтворити посилання на нову версію JRE / JDK. Тому:

  • встановити різні версії JDK, які ви хочете використовувати
  • створити посилання на цю папку або шляхом з'єднання, або за допомогою вбудованої команди mklink
  • встановіть PATH на посилання
  • Якщо буде використана інша версія Java, видаліть посилання, створіть нову, сценарії PATH / JAVA_HOME / з жорстким кодом залишаться недоторканими


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 file .jnlp> -localfile -J "< path_temp_jnlp_file_ .jnlp>"

2- запуск із кешу: < your_JRE_version \ bin \ javaws.exe> ​​-localfile -J "< шлях_вашого_локального_jnlp_file .jnlp>"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.