Windows 10 Gradle: JAVA_HOME 设置为无效目录

Windows 10 Gradle: JAVA_HOME is set to an invalid directory

我试图在 Git BashPowerShell[= 中 运行 ./gradlew bootRun 28=],并得到这个错误:ERROR: JAVA_HOME is set to an invalid directory: C:\Program Files\Java\jre1.8.0_121

gradlew 文件位于从 git 克隆的项目目录中。这是来自Spring官方指南的练习项目。还有一个包含这些行的 gradle.bat 文件:

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%\bin\java.exe 

我也试过 运行 Eclipse EE,没问题。环境设置应该没问题。

看起来您的 JAVA_HOME 变量解析为 JRE 安装目录。但是当你谈论 Gradle 时,你肯定会尝试 build/compile 编码。

如果您安装了 JDK,请更改 JAVA_HOME 变量以指向它。文件夹名称通常应以 "jdk" 开头。否则,您必须安装 Java 开发工具包。

您也可以尝试在命令行 运行 gradle 之前手动导出变量 (SET JAVA_HOME=<path to the jdk directory>)

除了欧内斯特的回答,JAVA_HOME它想要的是实际目录,而不是像javac想要的路径那样的bin文件夹。我花了一些时间才弄明白

我发现自己遇到了同样的问题,尽管我的 JAVA_HOME 设置为正确的 JDK 路径。 但是 Windows10 在路径的末尾附加了一个分号。 这样 JAVA_HOME 变量可以在任何地方使用,但不适用于 Gradle。 我发布这个,因为它可能会节省其他人我一直在寻找它的时间 ;)

在我的谷歌搜索中找到了一个我以前从未见过的解决方案。

在某些编辑器中打开您的 gradlew.bat。在第 34 行你会看到这个:

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%\bin\java.exe

if exist "%JAVA_EXE%" goto init

echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

将此行添加到错误消息中:echo %JAVA_EXE%

看起来像这样

echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo %JAVA_EXE%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.

然后 运行 你的 gradlew.bat 文件。

错误现在应该再次出现,但添加了 JAVA_EXE 路径的回显。在我的例子中,它是回显 \bin\java.exe 而不是完整路径 C:\...\Java\jre1.8.0_251\bin\java.exe

为了解决这个问题,我进行了更改

set JAVA_EXE=%JAVA_HOME%\bin\java.exe

set JAVA_EXE=C:\...\Java\jdk1.8.0_261\bin\java.exe

该值现在是硬编码的,是的,但它确实有效。不知道为什么gradle不把变量名concat到路径里

请将 JAVA_HOME 变量位置设置为 JDK 而不是 JRE 的路径。

如果设置正确,请在编辑模式下检查环境变量。 就我而言,我发现在末尾的 JAVA_HOME 环境变量中附加了一个分号。

检查:

  1. 打开环境变量列表。
  2. Select 变量并单击编辑。
  3. 删除分号并保存。

关闭设置并使用 echo %JAVA_HOME% 和 运行 gradle 检查 cmd 中的路径-v.

运行 完美。

注意:通过单击“编辑”按钮检查变量值,因为我们看不到分号。 Windows 添加一个分号,以便同一个变量可以用作多个位置的路径。

添加图片以供参考: