在多个Java版本JDK1.8和JDK10之间切换

时间:2018-05-09 09:04:36

标签: java java-8 java-10

安装jdk 8和jdk 10之后,jdk版本10被配置为系统JDK。即使我将JAVA_HOME,PATH更改为jdk 8,系统jdk也不会更改。在更改路径和JAVA_HOME之后,如果我在命令提示符下检查java的版本,它会显示jdk 8.但如果我双击一个可执行的jar文件,则需要系统jdk,即jdk 10.

我尝试更改注册表以编辑系统jdk路径和版本,但它不起作用。

从configure java我只能看到jdk 10配置为系统jdk且不可编辑。

如果您能够将jdk版本切换为系统jdk,请提供帮助。

复制问题的步骤:

  1. 安装jdk 8
  2. 安装jdk 10
  3. 不卸载jdk 10从命令提示符检查java版本更改java home和jdk 8的路径,它将显示jdk 8
    1. 现在尝试通过双击桌面来运行可执行jar。它将需要jdk 10.这就是问题。
  4. 注意:这不是重复的帖子。有关jdk6或7或8之间切换的帖子,但没有jdk 10. JDK 10也没有来自oracle的zip发行版,它只是作为可安装文件。

4 个答案:

答案 0 :(得分:1)

官方没有任何"系统jdk"。双击文件时,它是确定用于打开该文件的程序的文件关联。如何定义文件关联取决于您的操作系统。例如,在Windows上,存在两个存储文件关联的位置。第一个是在HKLM\Classes下的注册表中,由命令行使用,但这可以由Windows资源管理器特定的关联覆盖。每次切换JDK时,可能都不值得为.jar文件更改文件关联的麻烦。相反,只需转到命令行并键入java -jar myapp.jar即可。然后,它将采用您在java上定义的任何PATH版本。

答案 1 :(得分:0)

通常,您的PATH已包含对%JAVA_HOME%\bin的引用(例如在Windows上),因此再次添加/添加到路径将不起作用。您可以通过删除现有引用来修复PATH,或者 prepend 新设置。

在Windows上:

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

现在,之前的引用仍然在路径上,但之后的新引用,因此它将被忽略。

答案 2 :(得分:0)

根据您所使用的平台,通常会有一个指向目录的PATH环境。无论先在哪里,都会被使用。所以在例如linux,它会接收安装在/ usr / bin中的任何java可执行文件以及它们指向的任何jvm。

您可以使用绝对路径绕过它。很多用于java的命令行软件仍然依赖于JAVA_HOME来确定jvm的位置(例如gradle),所以你也可以使用它。

最后,在linux和osx上,您可以使用例如jenv控制使用哪个jvm。您还可以通过插件管理JAVA_HOME(默认情况下已关闭)。

这就是我在Mac上的.bash_profile中的内容。类似的东西也适用于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 -)"

答案 3 :(得分:0)

我来晚了,但是我可以解决这个问题。您不需要卸载任何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