在Win10上切换java版本-注册键的问题



我必须在Windows 10上切换Java 7和Java 8。

我已经安装了:

C:Program FilesJavajre1.8.0_91
C:Program FilesJavajre7

在我的PATH中有一个通用路径(其中包含到java可执行文件的链接)。这是所有环境变量中唯一的java值:

Path=C:ProgramDataOracleJavajavapath;..

当我想运行Java 8时,我创建了3个到C:Program FilesJavajre1.8.0_91的真实链接(使用命令mklink /H [link] [origin]):

C:ProgramDataOracleJavajavapathjava.exe   >> C:Program FilesJavajre1.8.0_91binjavapathjava.exe  
C:ProgramDataOracleJavajavapathjavaw.exe  >> C:Program FilesJavajre1.8.0_91binjavapathjavaw.exe 
C:ProgramDataOracleJavajavapathjavaws.exe >> C:Program FilesJavajre1.8.0_91binjavapathjavaws.exe

使用这个配置可以工作。

但是,当我想运行Java 7时,我创建了3个真正的链接到C:Program FilesJavajre7:

C:ProgramDataOracleJavajavapathjava.exe   >> C:Program FilesJavajre7binjavapathjava.exe  
C:ProgramDataOracleJavajavapathjavaw.exe  >> C:Program FilesJavajre7binjavapathjavaw.exe 
C:ProgramDataOracleJavajavapathjavaws.exe >> C:Program FilesJavajre7binjavapathjavaws.exe

当我尝试运行java, 它不工作!得到以下错误:

Error: Registry key 'SoftwareJavaSoftJava Runtime Environment'CurrentVersion' 
has value '1.8', but '1.7' is required.
Error: could not find java.dll Error: Could not find Java SE Runtime Environment.

有一个变通办法,但我不太喜欢。我只能这样使用Java 7:

  1. 从%PATH%中移除C:ProgramDataOracleJavajavapath;
  2. 添加C:Program FilesJavajre7bin;到%PATH%

我不喜欢这个解决方案,因为它与以前的配置不同,因为我每次都要手动从PATH中删除值。

如果知道Oracle的推荐方法是什么就好了,但是没有找到相关信息。下面可能是一个合理的hack的解决方法(我过去使用过类似的方法)。

创建连接(或符号链接):

mklink /j "C:Program FilesJavajre" "C:Program FilesJavajre1.8.0_102"

然后将C:ProgramDataOracleJavajavapathPATH中删除,并将其替换为C:Program FilesJavajrebin

现在,当你想切换到Java 7时,只需执行:

rd "C:Program FilesJavajre"
mklink /j "C:Program FilesJavajre" "C:Program FilesJavajre7"

这是有效的,因为当您现在输入java时,它将在C:Program FilesJavajrebinjava.exe中找到它(从PATH)。可执行文件知道它在哪个目录中,并在那里查找其他文件(jar, dll等)。由于jre现在是jre7的别名,它将找到正确的。因为它找到了它们,所以它不会在注册表中查找。

当然,您可以创建一个批处理文件或快捷图标,其中包含在两个版本之间切换的命令。

我不是100%,但我相信您可能必须将JAVA_HOME变量设置为您想要使用的版本

最新更新