【问题标题】:Script changing JAVA_HOME environment variable not working脚本更改 JAVA_HOME 环境变量不起作用
【发布时间】:2020-03-14 10:50:37
【问题描述】:

我最近遇到了以下问题:我有一个 .jar 文件,女巫尚未移植到高于 Java 8 的 Java 版本,但更喜欢使用 Java 13。我的环境是 Windows,所以我逻辑上尝试编写一个脚本来自动更改 Path 变量:

set JAVA_HOME=C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot
set Path=%JAVA_HOME%\bin;%Path%
echo Java 8 is set to path

我手动将我的JAVA_HOME 环境变量设置为C:\Program Files\AdoptOpenJDK\jdk-13.0.2.8-hotspot,并在路径中添加了%JAVA_HOME%\bin。然后,我将文件夹添加到 Path 中,其中存储了将 Path 变量更改为所需版本的脚本,并为 Java 8 和 Java 13 编写了批处理文件。如果JAVA_HOME 运行良好,我在 cmd 中进行了测试:

echo %JAVA_HOME%
C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot

确实如此。另外,我可以成功调用我的脚本(我的批处理文件的名称是switch_to_java8:

C:\WINDOWS\system32>switch_to_java8

C:\WINDOWS\system32>set JAVA_HOME=C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot

C:\WINDOWS\system32>set Path=C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot\bin;C:\Program Files (x86)\Python38-32\Scripts\;C:\Program Files (x86)\Python38-32\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\WINDOWS\System32\OpenSSH\;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files\Microsoft VS Code\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\dotnet\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\;C:\Program Files\Common Files\Autodesk Shared\;C:\Program Files\Microsoft SQL Server\120\Tools\Binn\;C:\Program Files\AdoptOpenJDK\jdk-13.0.2.8-hotspot\bin;C:\Program Files\AdoptOpenJDK\scripts;C:\Users\minef\AppData\Local\Microsoft\WindowsApps

C:\WINDOWS\system32>echo Java 8 is set to path
Java 8 is set to path

看来它毕竟没有修改JAVA_HOME,我不太明白为什么。这是什么原因以及如何解决?我在每个步骤中都使用了高架访问。另外,是否可以编写一个批处理文件来直接调用C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot\bin\java.exe?如果是,我该怎么做?

【问题讨论】:

  • set 命令只影响当前的 shell。但是 Java 不使用 JAVA_HOME 变量,只使用 PATH 变量。
  • @user207421 是的,很明显 Java 使用 PATH 变量。我试图通过使用.%JAVA_HOME%\bin作为PATH变量并将JAVA_HOME变量修改为给定的JDK文件夹来实现这一点,所以如果我想使用JDK 13,脚本会将我的JAVA_HOME更改为JDK 13的文件夹,因此PATH变量成为新更改的 JAVA_HOME 的 bin 文件夹。但是,如果仔细观察,您会看到 PATH 变量本身并没有更改为 %JAVA_HOME%\bin
  • 您的问题不清楚,如果您想edit your question更好地向我们解释您想要什么,它将有助于我们帮助您。我最好的猜测是,您想从现有的%PATH% 值中删除C:\Program Files\AdoptOpenJDK\jdk-13.0.2.8-hotspot\bin,而不是添加%JAVA_HOME%\bin 的扩展值,而是要将其添加到未扩展的形式中。这个想法是%JAVA_HOME% 的简单更改将始终反映在%PATH% 中,而无需更新这两个变量。我的分析正确吗?
  • Compo,是的,您的分析非常正确。如果这是一个格式错误的问题,我很抱歉。

标签: java windows batch-file environment-variables adoptopenjdk


【解决方案1】:

我不太明白问题出在哪里,您已将 JAVA_HOME 设置为 C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot,它就是这样做的。我错过了什么吗?

对于您的其他问题,要运行 C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot\java.exe,只需调用 %JAVA_HOME%\java.exe

【讨论】:

  • 不是,我明确表示并没有改成那个,运行脚本的时候可以看到,PATH变量在列出来。
  • 关于我的另一个问题,你认为如果我使用相对路径而不是写 %JAVA_HOME% 是否可行?
  • @BalázsBörcsök 看来您的问题写错了或附加了错误的代码,您在脚本中调用了SET JAVA_HOME=C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot,因此即使您事先手动设置它,它也会将其更改为剧本。 %JAVA_HOME% 已经是一个相对路径,所以我看不出使用不同相对路径的原因。无论哪种方式,如果你真的想的话,你可以使用%%~d
猜你喜欢
  • 2015-01-07
  • 2012-11-07
  • 2023-03-05
  • 2011-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-19
  • 2021-11-13
相关资源
最近更新 更多