Maven指向JRE而不是jdk

22
我一直和一个同事合作解决我在刚加入的新项目中遇到的问题。简而言之,Maven无法正确地构建我的.WAR文件。当我把我的WAR文件交给同事时,他也遇到了同样的问题,但当他把编译好的.WAR文件交给我时,一切都正常了。我们都使用相同的源代码。所以我正在尝试正确设置Maven(与他的一样),我们现在都有相同的Maven版本。但是,我认为Maven错误地查看了java_home。
当我执行mvn -version命令时,我收到以下信息:
C:\java\KME_workspace\CU-KME>mvn -version
Apache Maven 3.0.4 (r1232337; 2012-01-17 03:44:56-0500)
Maven home: C:\java\tools\apache-maven-3.0.4
Java version: 1.6.0_45, vendor: Sun Microsystems Inc.
Java home: C:\java\jdks\jdk1.6.0_45\jre
Default locale: en_US, platform encoding: Cp1252
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

我的系统的JAVA_HOME变量已正确设置为C:\java\jdks\jdk1.6.0_45。

有人知道我的Maven正在查找JRE,我如何将其正确设置回JDK?也可能我没有正确地看待问题,如果你有任何想法,那就太好了。

谢谢。


正如一些人所指出的,在Maven版本中Java home中的JRE引用是我自己陷入的一个误区。经过进一步测试,我得到了一些新的有趣信息。我直接从命令行运行Maven命令。我使用Eclipse从我们的svn存储库中签出代码,并尝试在该代码上运行Maven package,但.war文件无法正确构建。然而,如果我在Eclipse中对团队进行导出到一个新目录,然后在该目录上运行Maven package,它可以正常构建.war文件并且完美地工作。据我了解,Eclipse中的团队导出会删除导出目录中的所有子版本控制文件。有人有解决此问题的思路吗?


3
你的WAR文件有什么问题?也许这可以给我们一些提示。另外,只是为了让你知道,在我的Windows 7电脑上运行“mvn --version”命令会输出相同的结果(除了Java 7),并且我的WAR文件可以成功构建。 - thatidiotguy
4
我认为 Maven 不是你问题的根源。在我的 Linux 机器上运行 mvn -version 显示 Java 的主目录是 /usr/local/java/7u25/jre。你说的“Maven 没有正确地构建我的 war 文件”是什么意思?你有比较过这两个 war 文件来查看它们的不同之处吗? - Vivin Paliath
2
Maven是正确的 - 正如您从jdk1.6.0_45中看到的那样,它正在使用jdk。您在构建过程中观察到的实际问题是什么? - Thorn G
1
你可能应该取消接受此处的已接受答案,因为它与你遇到的问题无关... - eis
2
另外,您应该添加“ .war 构建不正确”实际意味着什么,最好附带一个测试案例。没有测试案例,很难得出答案。 - eis
显示剩余7条评论
8个回答

26

来自Maven属性指南:

${java.home}指定了当前JRE_HOME环境的路径, 可用于相对路径获取,例如: ${java.home}../bin/java.exe

java.home属性不同于JAVA_HOME环境设置。 它实际上是一个动态属性,显示运行代码的JRE。

尝试正确设置java.home属性并查看是否有效。


4
这个答案几乎是我在https://dev59.com/cmUp5IYBdhLWcg3wbnMS#15279640的回答的逐字复制。 - eis
1
@JunedAhsan 那我在这里应该怎么做?我也遇到了同样的错误。我应该在哪里设置home属性? - Kraken
java.home 永远不会通过环境变量进行设置。它会自动设置。JAVA_HOME 是您可以设置的内容。 - eis
9
@eis已经正确设置了JAVA_HOME,但是Maven错误地选择了JRE而不是JDK。然后JunedAhsan回复说java.home与JAVA_HOME不同,当Kraken问如何设置java.home时,你的回答是设置JAVA_HOME。难道我们又回到了起点?你们的答案并没有太大帮助,或者我漏掉了什么重要信息。 - Aldian
@Aldian,Kraken遇到的问题在这个线程中已经解决了——他缺少了tools.jar。再次强调,这是一个无关的问题。 - eis
显示剩余4条评论

3
如果Eclipse IDE显示编译器不可用,您可以按照以下步骤将环境从jre更改为jdk:
1. (右键单击) your_project_name > Build Path > Configure Build Path > Libraries > (双击) JRE System Libraries > Alternate Jre: jdk 1.8 > 确定 2. 然后在Libraries中的Installed JRES选项中选择jdk 1.8 3. Project > Clean 4. Maven > Update

3
在Eclipse中,依次点击“Window>Preferences>Java>Installed JREs”,确保jdk已经存在并被选中。 如果jdk和jre都存在,则从Installed JREs中删除jre。

0

如果您的变量名为javapath,也会出现此错误。如果您已经指定了类似于JAVA_HOME的内容,请尝试将其删除,例如:"C:\Program Files\Java\jdk1.8.0_171",然后在Path中添加"%JAVA_HOME%\bin"


0

您可以在此窗口上进行修改:

enter image description here


0

Windows CMD不会刷新环境变量,您需要运行新实例来应用新的环境设置并刷新新变量JAVA_HOME。


0

一旦您拥有JDK安装路径:

  1. 右键单击桌面上的“我的电脑”图标,然后选择“属性”。
  2. 单击“高级”选项卡。
  3. 单击“环境变量”按钮。
  4. 在“系统变量”下,单击“新建”。
  5. 将变量名称输入为JAVA_HOME。
  6. 将变量值(上述路径之一)输入为Java开发工具包的安装路径。
  7. 单击“确定”。
  8. 单击“应用更改”。

您可能需要重新启动Windows。

这对我起作用了。


0
在我的测试中,你只需要确保mvn -versionJava home输出是你jdk home中的jre,这是使maven工作的唯一方法。

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