3

安装 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 且不可编辑的 jdk 10。

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

复制问题的步骤:

  1. 安装jdk 8
  2. 安装jdk 10
  3. 在不卸载 jdk 10 的情况下,从命令提示符检查 java 版本更改 java home 和 jdk 8 的路径,它将显示 jdk 8
    1. 现在尝试通过在桌面上双击来运行一个可执行的 jar。它将需要 jdk 10。这就是问题所在。

注意:这不是重复的帖子。有关于在 jdk6 或 7 或 8 之间切换但不使用 jdk 10 的帖子。JDK 10 也没有来自 oracle 的 zip 分发,它仅作为可安装文件提供。

4

4 回答 4

1

通常,您的 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%

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

于 2018-05-09T09:53:43.113 回答
1

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

于 2018-05-09T10:14:32.000 回答
0

我很晚了,但我可以解决这个问题。您不需要卸载任何 JDK。在 C:\Program Files\Java 中安装所有 JDK。

从代码创建 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
于 2018-08-07T18:10:41.580 回答
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 -)"
于 2018-05-09T12:15:17.900 回答