Можем ли мы установить две версии Java JDK в Windows?

Я создал исполняемый файл JAR, разработанный на Java версии 8. Файл JAR открывался двойным щелчком. Но поскольку приложения Oracle поддерживают только Java 6, мне пришлось установить JRE 6, но после установки JRE 6 мой исполняемый файл JAR не открывается.

Я установил путь к корзине JDK 8 в переменных среды Path. Есть ли решение этой проблемы? Почему файл JAR не открывается после двух версий Java в системе?

JAR должен открыться, даже если в системе установлены две версии Java 6 и 8.


person coding_aqua    schedule 01.04.2019    source источник
comment
Можем ли мы установить две версии Java JDK в Windows Да. Почему jar не открывается после двух версий JAVA в системе? Поскольку Java 6 не может запускать скомпилированный код Java 8, вы должны получить сообщение об ошибке, и эта ошибка должна была привести вас к решению ( перекомпилируйте ваше приложение с помощью Java 6, поскольку Java 8 может запускать скомпилированный код Java 6).   -  person Elliott Frisch    schedule 01.04.2019
comment
Привет, Эллиотт :), Спасибо за ответ. Мое приложение будет поддерживать только Java 8 и выше. У вас есть другое предложение?   -  person coding_aqua    schedule 01.04.2019
comment
Если ваше приложение будет поддерживать только Java 8 и выше, зачем вы установили Java 6?   -  person Elliott Frisch    schedule 01.04.2019
comment
@JTechseeker установил путь по умолчанию для вашей JRE на 6   -  person Mustahsan    schedule 01.04.2019
comment
@ElliottFrisch: Привет, Эллиот, мы используем экземпляр Oracle ERP, для открытия форм которого требуется Java 6.   -  person coding_aqua    schedule 01.04.2019
comment
@Mustahsan: Привет, Мустахсан, твое решение не помогло :(   -  person coding_aqua    schedule 01.04.2019
comment
Я часто обнаруживаю, что при установке нескольких JDK в одной системе последний установленный «выигрывает», когда дело доходит до командной строки. Попробуйте переустановить JDK с самой высокой версией в последнюю очередь.   -  person prunge    schedule 01.04.2019
comment
Что касается JAVA 8, вы можете получить Amazon Corretto или AdoptOpenJDK в виде ZIP-файла. Тогда вам не нужно заботиться о переменных среды.   -  person Bernhard Döbler    schedule 01.04.2019
comment
@prunge: Привет. Ваше решение решило мою проблему. Мне пришлось переустановить java 8, однако java6 все еще была в моей системе, и теперь формы также работают, а исполняемый файл jar также работает. Спасибо.   -  person coding_aqua    schedule 03.04.2019


Ответы (4)


Вы столкнулись с проблемой обратной совместимости. Обратная совместимость означает, что вы можете запускать программу Java 6 в среде выполнения Java 8, но не наоборот.

Вы можете запустить более низкую конфигурацию на более высокой конфигурации, а не наоборот.

Причин тому несколько:

  1. Байт-код имеет версию, и JVM проверяет, поддерживает ли он версию, найденную в файлах .class.
  2. Некоторые языковые конструкции не могут быть выражены в предыдущих версиях байт-кода.
  3. В более новых JRE есть новые классы и методы, которые не будут работать со старыми.

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

javac -source 1.8 -target 1.6 MyClass.java

Вы можете скомпилировать свой код в байт-код Java 1.6, используя JDK 1.8. Просто позаботьтесь о следующем:

  • -source=1.8 и -target=1.6 параметры компилятора
  • Если вы используете Maven, рассмотрите возможность наличия двух файлов pom.xml с необязательным родительским файлом.

Источник: Можно ли запустить программу, разработанную на Java 8, на Java 7?

person Vishwa Ratna    schedule 01.04.2019

Я не уверен, сработает ли это решение или нет. Попробуйте запустить команду java -version и посмотрите, возвращает ли она путь java 6 или 8. Также попробуйте указать путь к JDK 8 как переменную JAVA_HOME и добавить его в путь, подобный этому: path=%JAVA_HOME%/bin, и посмотрите, работает ли он. Если вы получаете java 6 как версию java, попробуйте использовать описанный выше метод, а затем установите JRE 6.

person Akshaya KAushik    schedule 02.04.2019
comment
Настройка окружения уже сделана. Он перестал работать после установки java6. - person coding_aqua; 03.04.2019
comment
Итак, что вы получаете, когда запускаете командную строку java -version form. - person Akshaya KAushik; 08.04.2019
comment
Java версии 1.8.0_162. После переустановки java 8 теперь работает. - person coding_aqua; 09.04.2019

Привет всем Спасибо за ваш ответ. Я сохранил java6 и переустановил java8, и теперь формы и jar работают!

person coding_aqua    schedule 03.04.2019

В краткосрочной перспективе
ответ будет да. Поскольку оба файла JDK загружаются как файлы jar, можно загрузить оба файла jar. Причина того, что после двух версий Java не открывается, как сказал @Elliott: «в системе Java 6 не может запускать скомпилированный код Java 8, вы должны получить сообщение об ошибке». Это совершенно верно, но проблема заключается в том, как использовать несколько версий JDK на одной машине.

Затем мы должны перейти к долгосрочной перспективе.
Сложность заключается в том, чтобы управлять этими многочисленными JDK и IDE. Это проще простого, если я просто использую Eclipse для компиляции своего кода, потому что IDE позволяет мне настроить несколько версий среды выполнения Java. К сожалению (или к счастью), мне приходится использовать командную строку/оболочку для создания своего кода. Поэтому важно, чтобы у меня была правильная версия JDK, представленная в PATH и других связанных переменных среды (таких как JAVA_HOME).

Вручную изменять переменные среды каждый раз, когда я хочу переключиться между JDK, — задача не из приятных. Но благодаря Windows Powershell я могу написать сценарий, который сделает за меня всю тяжелую работу.

По сути, вы хотите установить переменную PATH для добавления папки bin Java и установить переменную среды JAVA_HOME, а затем запустить правильную среду Eclipse IDE. И я хочу сделать это с помощью одной команды. Давай сделаем это.

  1. Откройте Windows PowerShell.
  2. Я предпочитаю писать пользовательские сценарии Windows в файле своего профиля, чтобы он был доступен для запуска всякий раз, когда я открываю оболочку. Чтобы отредактировать профиль, выполните следующую команду: notepad.exe $profile — $profile — это специальная переменная, указывающая на файл вашего профиля.
  3. Запишите приведенный ниже скрипт в файл профиля и сохраните его.

function myIDE{ $env:Path = "C:vraajavajdk7bin;" $env:JAVA_HOME = "C:vraajavajdk7" C:vraaideeclipseeclipse set-location C:vraaworkspacemyproject play }

function officeIDE{
$env:Path  = "C:vraajavajdk6bin;"
$env:JAVA_HOME = "C:vraajavajdk6"
C:officeeclipseeclipse
}
  1. Закройте и перезапустите Powershell.
  2. Теперь вы можете ввести команду myIDE, которая установит правильный путь и переменные среды, а затем запустит Eclipse IDE.

Как видите, есть две функции с разными конфигурациями. Просто вызовите имя функции, которую хотите запустить, из командной строки Powershell (myIDE).

Если возникнут какие-либо проблемы, пожалуйста, оставьте комментарий ниже!

person Janaka Ekanayake    schedule 01.04.2019