Переключение между несколькими версиями Java JDK1.8 и JDK10 - PullRequest
0 голосов
/ 09 мая 2018

После установки jdk 8 и jdk 10 jdk версии 10 настраивается как системный JDK. Несмотря на то, что я меняю JAVA_HOME, PATH на jdk 8, системный jdk не меняется. После изменения пути и JAVA_HOME, если я проверяю версию java в командной строке, он показывает jdk 8. Но если я дважды щелкаю исполняемый файл jar, он берет системный jdk, т.е. jdk 10.

Я попытался изменить реестр, чтобы отредактировать системные пути и версии jdk, но это не сработало.

Из конфигурации java я вижу только jdk 10, настроенный как системный jdk и недоступный для редактирования.

Пожалуйста, помогите, если вы можете переключать версии JDK как системный JDK.

Шаги для воспроизведения вопроса:

  1. установить JDK 8
  2. установить JDK 10
  3. без удаления jdk 10 измените java home и путь к jdk 8 из командной строки проверьте версию java, появится jdk 8
    1. Теперь попробуйте запустить исполняемый файл, дважды щелкнув по рабочему столу. Это займет jdk 10. Это проблема.

ПРИМЕЧАНИЕ: Это не повторяющаяся запись. Есть сообщения о переключении между jdk6 или 7 или 8, но не с jdk 10. JDK 10 также не поставляется с zip-дистрибутивом от oracle, он поставляется только в виде устанавливаемого файла.

Ответы [ 4 ]

0 голосов
/ 07 августа 2018

Я очень поздно, но я могу решить это. Вам не нужно удалять какой-либо из JDK. Установите все JDK в C: \ Program Files \ Java.

Создание файла bat из кода и запуск от имени администратора. Он попросит вас выбрать номер JDK, выбрать свой JDK и нажать Enter. Вам просто нужно перезапустить приложение, которое использует JDK.

@echo off
echo "Current Java Version is"
echo %JAVA_HOME%
setlocal enableDelayedExpansion
SET PT="C:\Program Files\Java"
cd %PT%
::build "array" of folders
set folderCnt=0
for /f "eol=: delims=" %%F in ('dir /b /ad *') do (
  set /a folderCnt+=1
  set "folder!folderCnt!=%%F"
)

::print menu
for /l %%N in (1 1 %folderCnt%) do echo %%N - !folder%%N!
echo(

:get selection
set selection=
set /p "selection=Enter number to Set the JAVA_HOME and PATH "
echo you picked %selection% - !folder%selection%!
cd %PT%\!folder%selection%!
echo %cd%
( endlocal & rem return
   Set jdk=%cd%

)
echo Setting JAVA_HOME
SETX /M JAVA_HOME "%jdk%"
SET JAVA_HOME=%jdk%
echo JAVA_HOME %JAVA_HOME%
SET JAVA_BIN="%%JAVA_HOME%%\bin"
echo PATH %JAVA_BIN%
SETX PATH /M "%JAVA_BIN%;%PATH%" 
echo Java Version Changed
pause
0 голосов
/ 09 мая 2018

Официально не существует такого понятия, как «системный jdk». Когда вы дважды щелкаете файл, ассоциация файлов определяет, какая программа используется для открытия этого файла. Как определяется файловая ассоциация, зависит от вашей операционной системы. Например, в Windows есть два места, где хранятся ассоциации файлов. Первый находится в реестре под HKLM\Classes, который используется командной строкой, но это может быть переопределено ассоциацией, специфичной для Windows Explorer. Вероятно, не стоит тратить время на изменение ассоциаций файлов для файлов .jar при каждом переключении JDK. Вместо этого просто перейдите в командную строку и введите java -jar myapp.jar. Тогда это займет любую версию java, которую вы определили для PATH.

0 голосов
/ 09 мая 2018

В зависимости от того, на какой платформе вы находитесь, обычно существует среда PATH, которая указывает на каталоги. Что бы там ни было сначала, привыкаешь. Так, например, Linux, он будет выбирать любые исполняемые файлы Java, установленные в / usr / bin, и все, на что они указывают jvm.

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

Наконец, в linux и osx вы можете использовать, например, jenv, чтобы контролировать, какой jvm используется. Вы также можете управлять JAVA_HOME с помощью плагина (по умолчанию выключен).

Это то, что у меня есть в моем .bash_profile на моем Mac. Нечто подобное должно работать и на Linux, и на Windows.

# brew install jenv, install some jdks and make sure jenv knows where they are, and run this once to get jenv to export JAVA_HOME:
# jenv enable-plugin export
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"
0 голосов
/ 09 мая 2018

Обычно ваш PATH уже содержит ссылку на %JAVA_HOME%\bin (например, в Windows), поэтому добавление / добавление его снова в путь не будет иметь никакого эффекта. Вы можете исправить PATH, удалив существующую ссылку, или предварять новую настройку.

На окнах:

C:\>set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_1.41
C:\>set PATH=%JAVA_HOME%\bin;%PATH%

Теперь предыдущая ссылка все еще находится на пути, но после новой ссылки, поэтому она будет игнорироваться.

...