我该如何修复maven错误“JAVA_HOME环境变量定义不正确”?

117

问题:

当我通过Inno安装程序批量执行时,我遇到了Maven错误“JAVA_HOME环境变量定义不正确”的问题。但是,在Inno Setup之外,我可以成功运行(例如命令行、批处理文件和VBS)。我无法确定问题所在。

Inno Setup调用提示:

C:\>mvn -version
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE

常规命令提示符:

C:\>mvn -version
C:\
Apache Maven 3.5.0 (ff8f5e7444045639af65f6095c62210b5713f426; 2017-04-04T01:09:06+05:30)
Maven home: C:\Program Files\apache-maven-3.5.0\bin\..
Java version: 1.8.0_131, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_131\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

来自InnoSetup的Maven命令:

[Files]
Source: "C:\@Setup\MavenInstaller.bat"; DestDir: "{tmp}"; Flags: ignoreversion
[Run]
Filename: "{cmd}"; Parameters: "/C ""{tmp}\MavenInstaller.bat"""

批处理文件中的Maven命令:

mvn archetype:generate -DgroupId=com.mycompany.mycomponent-DartifactId=%APPLICATION_NAME% -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

设置JAVA_HOME

检查是否安装了Java 1.8。如果没有安装,请先安装并按照以下步骤设置JAVA HOME。

SETX JAVA_HOME "C:\Program Files\Java\jdk1.8.0_131"
SETX -m JAVA_HOME "C:\Program Files\Java\jdk1.8.0_131"
REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" /v Path /t REG_SZ /d "%path%;C:\Program Files\Java\jdk1.8.0_131\bin;" /f

许多感谢。
33个回答

94

以下是解决问题的最佳方法,请检查类路径上是否包含以下内容:

  1. 确保JAVA_HOME系统变量必须具有jdk直到版本,例如C:\ Program Files \ Java \ jdk1.7.0_80,不要在此处添加bin。

  2. 因为MAVEN将查找位于C:\ Program Files \ Java \ jdk1.7.0_80下的jre

  3. 在classpath中设置% JAVA_HOME%\ bin

然后尝试Maven版本。

希望对您有所帮助。


这个也解决了我的问题,感谢 @mukesh sharma。 - Assegd
3
关于#3,我认为你指的是Windows PATH变量,而不是类路径。 - wytten
我已经配置了JAVA home,但没有bin文件夹,仍然遇到相同的错误。 - Anu Priya
2
请问您能否将答案更新为适用于Linux系统? - Because i hate myself

63
我的JDK安装在C:\Program Files\Java\jdk1.8.0_144\。 我设置了JAVA_HOME= C:\Program Files\Java\jdk1.8.0_144\, 但是出现了这个错误:
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE

当我将JAVA_HOME更改为C:\Program Files\Java\jdk1.8.0_144\jre时,问题得到解决。
我不确定是怎么解决的。


2
你好,欢迎来到 Stack Overflow!我编辑了你的答案,使代码部分更加明显,更易于 Stack Overflow 用户阅读 - 请参阅编辑帮助以获取有关格式设置的更多信息。感谢分享! - SherylHohman
1
这是工作,谢谢。但是如何使用目录jre而不是bin来使其工作? - NM Naufaldo
你可能需要重新启动bash/cmd才能反映更改。 - Vibhor Dube
这对我也起作用了。由于我通过IntelliJ IDEA安装了JDK,它将其保存在%HOMEPATH%\.jdks上,因此我必须添加到环境变量的路径最终是%HOMEPATH%\.jdks\corretto-1.8.0_322\jre。谢谢:) - badjuice

56

以下是我如何在Windows 10上解决这个问题的方法:

我的JDK安装在C:\Program Files\Java\jdk-11.0.2中,问题出在Program Files包含空格。如果我使用set JAVA_HOME="C:\Program Files\Java\jdk-11.0.2"设置JAVA_HOME,那么Maven会出现双引号的问题:

C:\Users>set JAVA_HOME="C:\Program Files\Java\jdk-11.0.2"

C:\Users>echo %JAVA_HOME%
"C:\Program Files\Java\jdk-11.0.2"

C:\Users>mvn -version
Files\Java\jdk-11.0.2""=="" was unexpected at this time.

Program Files称为PROGRA~1也没有帮助。解决方案是在JAVA_HOME中使用PROGRAMFILES变量:

Program Files称为PROGRA~1也没有帮助。解决方案是在JAVA_HOME中使用PROGRAMFILES变量:

C:\Users>echo %PROGRAMFILES%
C:\Program Files

C:\Program Files>set JAVA_HOME=%PROGRAMFILES%\Java\jdk-11.0.2

C:\Program Files>echo %JAVA_HOME%
C:\Program Files\Java\jdk-11.0.2

C:\Program Files>mvn -version
Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T17:06:16+02:00)
Maven home: C:\apache-maven-3.6.2\bin\..
Java version: 11.0.2, vendor: Oracle Corporation, runtime: C:\Program Files\Java\jdk-11.0.2
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

2
谢谢,这对我很有帮助。 - groverboy
1
这对我非常有效,谢谢!+1 - ADJ
一旦在其目录中设置了值,它就可以在单个项目上运行。我该如何使其在任何地方都能运行? - Upulie Han
setx JAVA_HOME "%PROGRAMFILES%\Java\jdk-17.0.4" /M 这将永久设置值。 - Upulie Han
2
谢谢,我已经两次看到了你的答案!希望我能点赞两次! - ADJ

17
一个非常常见的错误是,在设置JAVA_HOMEJRE_HOME时,将值设置为C:\Program Files\Java\jdk1.8.0_221\bin或类似的内容。
请注意,JAVA_HOMEJRE_HOME的值不应包含\bin

这是我的错误。移除 \bin 就解决了。谢谢! - Clark Lind

9
SETX命令不会修改当前环境。
如果您运行以下批处理文件:
setx AAA aaa
echo AAA=%AAA%

它将会打印出来。
AAA=

所以你的批处理文件是错误的。你需要使用 set 命令:

set AAA=aaa

请参阅Windows环境变量中SETX和SET的区别

1
你做得很好,我能够回显JAVA_HOME。但是Maven命令还没有生效。让我来处理一下。 - ramkumar-yoganathan

7

从环境变量中删除JAVA_HOME和JAVA_JRE可以解决该问题。


6

在Windows操作系统下使用 mvn clean package命令时,我遇到了同样的问题。

C:\eclipse_workspace\my-sparkapp>mvn clean package
The JAVA_HOME environment variable is not defined correctly
This environment variable is needed to run this program
NB: JAVA_HOME should point to a JDK not a JRE

我通过删除“用户变量”/“系统变量”中的JAVA_HOME环境变量,然后重新启动笔记本电脑,再设置JAVA_HOME环境变量来解决了这个问题。
希望能对你有所帮助。

在我的工作笔记本电脑上,只需更改JAVA_HOME并关闭并重新打开控制台即可。但是在我家里的笔记本电脑上,更改JAVA_HOME后没有重新启动笔记本电脑。 - Juan José Melero Gómez

6
通过命令行设置JAVA_HOME目录对我很有帮助! 首先:
JAVA_HOME="C:\Program Files\Java\jdk1.8.0"

或者:
export JAVA_HOME="C:\Program Files\Java\jdk1.8.0"

然后尝试:

mvn -version

为确保您不会出现同样的错误。:)

5

我删除了JAVA_HOME变量,仅保留路径和类路径变量,将它们分别指向jdk和jre。这对我起作用了。


5

在您的环境变量路径中,添加以下内容:

%JAVA_HOME%\bin

同时还要添加Maven文件夹的路径,如下所示:

C:\Program Files (x86)\apache-maven-3.8.4\bin

然后创建名为用户变量的变量

JAVA_HOME 

并将其设置为路径

C:\Program Files\Java\jdk-17\ 

(不含二进制文件!)

最后一步:重要 重新启动您正在使用的IntelliJ或其他程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接