Maven无法在以下位置找到Javac编译器:


76

当我尝试生成战争文件时,它显示出一些错误,例如

[ERROR] Unable to locate the Javac Compiler in:
[ERROR] C:\Program Files\Java\jre7\..\lib\tools.jar

当我这样做echo %path%时显示

 C:\Windows\System32;D:\name\name1\Softwares\Maven\apache-maven-3.0.4\b
in;C:\Program Files\Notepad++\;%JDK_HOME%

当我做 echo %JDK_HOME%

D:\name\name\core java\software\Java\Java_1.6.0_04_win\jdk1.6.0_04\bin

当我的环境变量是jdk时,我不知道为什么maven引用jre。我还将安装的JRE更改为jdk1.6。


3
JDK_HOME应该是基本目录,即没有,\bin并且您应该%JDK_HOME%\bin在路径中。你会跑步D:\name\name\core java\software\Java\Java_1.6.0_04_win\jdk1.6.0_04\bin\java -version吗?
彼得·劳瑞

3
Maven希望JAVA_HOME设置为您的JDK安装目录,而不是JDK_HOME。请参阅Maven安装说明
Jesper 2012年

Answers:


152

仅在Eclipse安装程序中

它有4个步骤TODO。

步骤1:右键单击Eclipse项目属性

第2步:Java构建路径->库

步骤3:选择JRE系统库->单击“编辑”按钮->单击“已安装的JRE ...”按钮

步骤4:将JRE编辑为Set JRE Home = JAVA_HOME

屏幕截图:

在此处输入图片说明


2
我遇到了同样的问题,我已经按照您在此处显示的方法做了...现在它可以正常工作了,但是,我想知道直到现在,如果没有此更改它就可以正常工作(将Java home设置为jre)。到目前为止,我的项目运行良好,但是当我在Eclipse中重新运行项目时,突然出现了此错误。
preeth 2014年

@Preeth:最终,您的日食可能已经映射了JDK。如果您已删除JDK或已更新,则会遇到此问题
Parthasarathy B 2014年

1
Eclipse经常在JDK之外引用JRE。您应该将路径更改为JDK / jre。这个对我有用。
emeraldhieu 2015年

35

转到窗口->首选项...-> Java->已安装的JRE

编辑JRE主页= JAVA_HOME或JAVA_HOME \ jre

例如,如果您使用安装在C:\ Program Files中的jdk1.6.0_04,请进行以下更改:

C:\ Program Files \ Java \ jdk1.6.0_04 \ jre或C:\ Program Files \ Java \ jdk1.6.0_04而不是默认的C:\ Program Files \ Java \ jre7


1
如果您使用的是eclipse,则它可以工作(以maven build运行。),但是通过设置java_home环境变量可以解决此错误。无论如何,谢谢您的回答,先生,它对我来说对日食有效。
porfiriopartida

这对我有用,但是哇-将每个可能的JAVA_HOME,JDK_HOME,JRE_HOME等设置为我的jdk(或jdk / jre)位置后,太烦人了。
RockMeetHardplace 2013年

5

遇到同样的问题,但在我的情况下,目录Eclipse指出JRE是JDK。因此,我搜索了tools.jar并在那里。

我做了

  • Java构建路径>>库
  • JRE系统库>>编辑
  • 已安装的JRE >>单击我的jdk >>编辑
  • 添加外部Jars >> tools.jar

然后编译好


3

JDK_HOME变量应始终指向jdk的基本目录,而不是bin目录:

D:\name\name\core java\software\Java\Java_1.6.0_04_win\jdk1.6.0_04

定义好之后,将路径固定为

C:\Windows\System32;D:\name\name1\Softwares\Maven\apache-maven-3.0.4\bin;C:\Program Files\Notepad++\;%JDK_HOME%\bin

3

这是一个Eclipse问题。当我尝试使用以下命令从命令行构建它时

mvn package

工作正常。


2

听起来您已经JDK_HOME定义为用户变量,并且PATH定义为System变量,反之亦然-echo %PATH%不应包含诸如的未解析变量...;%JDK_HOME%

%JDK_HOME%\bin即使您必须显式放置路径,也请确保该路径位于您的PATH变量上(未解析)。


2

由于JUNIT版本,我遇到了同样的错误,我有3个3.8.1,并且我已更改为4.8.1。

所以解决方案是

您必须转到POM,并确保您的依赖项看起来像这样

 <dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.8.1</version>
  <scope>test</scope>
</dependency>

2

对于即使在路径正确设置为JDK的情况下在Eclipse中也遇到此问题的其他人,您需要从“已安装的JRE”中删除其他JRE。

转到窗口- >首选项- > Java的- >安装的JRE

分别选择未使用的JRE,然后删除

它为我工作。


1

我尝试了所有上述建议,但这些建议对我来说不起作用,但是我找到了解决该错误的方法。

以下步骤使项目成功编译:

在项目浏览器中,右键单击项目,选择“属性”。在右侧的树中,转到Java构建路径。选择选项卡“库”。点击“添加库”。选择JRE系统库。点击下一步。选择单选按钮Alternate JRE。单击“已安装的JRE”。选择具有正确版本的JRE。单击“应用”,然后关闭。在下一个屏幕中,单击“完成”。在属性窗口中,单击“应用”并关闭。在项目资源管理器中,右键单击pom.xml,然后选择“运行方式”>“ maven build”。在目标文本框中,输入“ install”。单击运行。

就我而言,这使项目成功建立。


0

在Eclipse中,诸如导入Maven项目或调用“更新源”之类的操作在运行Eclipse的同一JVM中运行。如果该JVM来自不属于JDK的JRE,则不会有Java编译器(tools.jar)。

因此,要从Eclipse中启动Maven,用于启动的JRE也必须来自JDK。默认情况下,Eclipse注册它的JRE,但可以在Parthasarathy前面提到的“窗口/首选项... / Java /已安装的JRE”首选项页面上对其进行配置。

另外,您可以在pom.xml中指定editorId,因此在编译Java代码时Maven不会寻找JDK:

 <plugin>
  <artifactid>maven-compiler-plugin</artifactid>
  <configuration>
    <compilerid>eclipse</compilerid>
  </configuration>
  <dependencies>
    <dependency>
      <groupid>org.codehaus.plexus</groupid>
      <artifactid>plexus-compiler-eclipse</artifactid>
      <version>xxxx</version>
    </dependency>
  </dependencies>
</plugin>

0

我遇到了类似的问题,因为没有人发布与我类似的方法,所以我走了。

导航到要启动的运行配置。
在那里选择了JRE选项卡。在此处调整“运行时JRE”,就可以开始了。


0

我可以通过执行以下步骤来解决:

右键单击项目,选择构建路径->配置构建路径->选择库选项卡->然后选择JRE系统库[对我来说,它的JavaSE-1.7版本]->单击编辑按钮->在JRE系统库窗口中选择执行环境-在下拉列表中,您可以为我选择列出的JDK,其JavaSE-1.7->单击此按钮旁边的环境按钮->在执行环境窗口中,您必须再次为我选择Java SE,其JavaSE-1.7->选择它,您将在“兼容的JRE”选项卡中具有一些选项,因此,在我的情况下,选择要拥有其jdk1.7.0_25的JDK。


单击确定,并通过执行适当的确定/完成来完成其余窗口。

最后执行Maven Clean和Maven安装。


如果说出您使用的是哪个应用程序,则此答案会更好。:)
JakeRobb '16

0

它取决于Maven版本。当您将安装较新版本的Maven时,不会出现此错误。您还可以使用tools.jar文件lib / tools.jar添加另一个目录-它也可以解决此问题。


0

如果您正在执行上述所有可能令人困惑的步骤,而我们的问题只是缺少tools.jre,那么只需按照以下步骤添加tools.jre即可解决问题。

步骤1:在Eclipse中,转到Windows->“偏好设置”

第2步:Java->已安装的JRE(双击它)

步骤3:单击“编辑”按钮->单击“添加外部JAR”

步骤4:现在选择tools.jar路径

现在应用更改,效果很好。

这是屏幕截图


0

尽管以上针对该问题的一些非Eclipse答案没有提到Eclipse,但它们需要更改路径变量。一种替代方法是使用命令行选项java.home,例如:

mvn package -Djava.home="C:\Program Files\Java\jdk1.8.0_161\jre"

注意最后的\ jre-令人惊讶的必要性。


0

目前的答案都没有帮助我。我们得到的是:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:
    #.#.#:compile (default-compile) on project Streaming_Test: Compilation failure
[ERROR] Unable to locate the Javac Compiler in:
[ERROR] /opt/java/J7.0/../lib/tools.jar

发生这种情况是因为Java安装已确定它是JRE安装。期望在JRE子目录上方有JDK内容,因此../lib在路径中。我们tools.jar$JAVA_HOME/lib/tools.jar不是在$JAVA_HOME/../lib/tools.jar

不幸的是,我们没有选择在操作系统上安装JDK的选项(不要问),所以这不是选择。我通过将以下内容添加到行家中来解决了这个问题pom.xml

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
      <fork>true</fork>  <!-- not sure if this is also needed -->
      <executable>${JAVA_HOME}/bin/javac</executable>
      <!--        ^^^^^^^^^^^^^^^^^^^^^^ -->
    </configuration>
  </plugin>

通过将可执行文件指向正确的位置,至少可以避免编译失败。


-1

对于Intellij Idea,请适当设置所有内容(与此类似):

JAVA_HOME = C:\Program Files\Java\jdk1.8.0_60
JRE_HOME = JAVA_HOME\jre

并且不要忘记重启Idea。该程序在启动时会拾取变量,因此在程序运行时对环境变量的任何更改都不会产生任何影响。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.