Maven构建失败:“无法在以下位置找到Javac编译器:jre或jdk问题”


112

我将JAVA_HOME设置为:

C:\Program Files (x86)\Java\jdk1.6.0_18

运行后maven install,我从Eclipse收到以下消息:

原因:

Unable to locate the Javac Compiler in:
  C:\Program Files (x86)\Java\jre6\..\lib\tools.jar
Please ensure you are using JDK 1.4 or above and
not a JRE (the com.sun.tools.javac.Main class is required).
In most cases you can change the location of your Java
installation by setting the JAVA_HOME environment variable.

我敢肯定这是棘手的部分

请确保您使用的是JDK 1.4或更高版本,而不是JRE

当我运行配置时,它将设置为JRE6。如何将其更改为已安装的JDK 1.6?

我什至尝试修改插件:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.0.2</version>
    <configuration>
        <source>1.6</source>
        <target>1.6</target>
        <executable>C:\Program Files (x86)\Java\jdk1.6.0_18\bin</executable>
    </configuration>
</plugin>

我仍然遇到相同的错误。

我使用Eclipse Maven插件。如何在Eclipse中从JRE更改为JDK?


您是否使用命令行set命令仔细检查过以确保JAVA_HOME设置为您认为的样子?
Powerlord

我每天都使用Java ..一切正常,在这里它是: java -version .6.0_18-ea" time Environment (build 1.6.0_18-ea-b04) ) Client VM (build 16.0-b11, mixed mode, sharing)
Gandalf StormCrow

1
设置可执行文件时设置<fork> true </ fork>。
罗宾

这实际上并不能告诉我们java -version正在运行哪个Java安装程序。它可能是JRE或JDK安装。 javac -version会更有用。但是,即使PATH正确且JAVA_HOME错误,这些仍将显示您的期望。
Powerlord

1
另外,可执行文件应该是... \ bin \ javac,您必须指定实际的可执行文件,而不仅仅是路径。
罗宾

Answers:


141

您可以尝试更新Eclipse正在使用的JDK,如下所示:

在菜单窗口首选项...Java已安装的JRE中添加并设置JRE

JRE type: Standard VM JRE
Name: jdk1.6.0_18
JRE home directory: C:\Program Files (x86)\Java\jdk1.6.0_18

如果不是这种情况,则可能是JAVA_HOME路径中的方括号和空格引起了问题。尝试将JDK复制到其他位置并更新JAVA_HOME。


1
这确实是您问题的第一部分,JAVA_HOME没问题
Gandalf StormCrow

47
对我来说,还需要执行一个额外的步骤:转到所述项目的属性-> Java构建路径->库->选择“ JRE系统库”,单击“编辑”并选择“工作区默认JRE”
maayank 2011年

1
对我来说还不够,只需要编辑eclipse.ini。我相信有一个错误。
ruhsuzbaykus 2011年

仅当我在执行环境->兼容JRE中检查了适当的jdk时,它才对我有用。
Vedran

9
另外,如果您从在这些配置更改之前创建的日食运行配置中运行Maven,请记住转到“运行配置窗口” /“ JRE”选项卡并选择正确的JRE。否则,即使将您的日食和项目设置更新为新的JRE,也可能会使用旧的错误JRE。
戴安娜(Diana)

20

文件eclipse.ini需要该vm参数指向您的JDK位置。

编辑eclipse.ini文件以指向您的JDK主页,如下所示-

-vm
C:\Program Files\Java\jdk1.6.0_06

这样可以确保Eclipse将在JDK上运行,而不在您的计算机上运行任何默认JRE。


5
这解决了我的问题。通过Web研究,看起来Maven使用JAVA_HOME,但是Maven插件对JAVA_HOME一无所知,而是默认使用启动Eclipse的VM。
jnosek 2011年

13

你试试:

转到Preferences/Java/Installed JREs并为该位置添加一个"C:\Program Files\Java\jdk1.6.0_27\jre或类似名称。

删除一个 C:\Program Files\Java\jre6

如您所见,C:\Program Files\Java\jre6\..\lib\tools.jar只有将第一部分(直到/ ..)替换为,该路径才有意义C:\Program Files\Java\jdk1.6.0_27\jre


10

fork设置为true可以为我解决问题。

<configuration>
    <fork>true</fork>
    <source>1.6</source>
    <target>1.6</target>
</configuration>

9

我有完全一样的问题!我一直在搜索和搜索几天,因为所有关于在ini ar中“将-vm c:\ program files \ java \ jdkxxxxx \ bin”作为快捷方式参数的说法都毫无帮助

(我听起来很沮丧吗?相信我,这是一种轻描淡写!我很生气,因为我失去了一个星期,试图使Maven变得可靠!)

我的行为非常无法预测。有时会编译,有时则不会。如果执行了maven clean,它将找不到编译器并失败。如果然后我更改了构建路径中的某些内容,它突然又可以工作了!!

直到我进入菜单WindowPreferencesJavaInstalled JRE's。我使用JDK的位置添加了新的JRE,然后删除了JRE。突然Maven运行稳定!

也许值得在Apache手册中输入30号左右的字体?

出于所有应有的尊重,这对于Java社区来说简直是令人发指!我无法想象所有这些人都在迷失了多少天,试图解决这种问题!我无法想象这是最终版本。我个人甚至都不敢以beta软件的名义发布这样的东西。

无论哪种方式,我都会问候。经过一周的篡改,我终于可以开始发展了。我希望我的老板不会对此有所了解。我花了很多精力说服他不要使用.NET,对此我已经感到很难过。


1
最重要的是,从控制台而不是从eclipse使用它,您将不会遇到此类问题,这是我在使用它几个月后意识到的,现在对maven感到很满意
Gandalf StormCrow 2010年

它更多的是一个eclipse ... m2e问题。
2012年

3

我在Eclipse中使用Run as-> Maven install遇到了同样的问题。JAVA_HOME和eclipse.ini都可以,指向我最新的JDK。但是m2clipse使用了JRE。在Eclipse之外使用mvn install效果很好!

就我而言,我解决了以下问题:

  1. 在Eclipse中导航:菜单窗口首选项Java已安装的JRE
  2. JRE和JDK有两个不活动的条目。活动的是最新安装的JDK。删除所有条目,但一个Maven应该使用。

我认为Maven没有考虑哪一个处于活动状态...



3

我刚刚安装了Maven 3.0.4 M2_HOMEM2JAVA_HOME进行了设置。然后,我运行以下命令:

mvn archetype:generate....

mvn compile

我收到失败的消息,例如:maven unable to locate javac compiler

在我的计算机上,默认情况下,我在C:\ program files \ java \ jre.1.6中安装了JRE 。我还有另一个C:\ java \ jdk1.6JAVA_HOME设置为此C:\ java \ jdk1.6

我的设置没有发现任何问题。搜索后,我决定调查一下mvn.bat,我回显了%JAVA_HOME%每个步骤,并正确显示为C:\java\jdk1.6,但是运行命令时mvn --version,它显示了Java主页:C:\ program files \ java \ jre1.1.6

最后,我发现我只需要-Djava.home=c:\java\jdk1.6按照下面的命令进行设置即可,现在可以正常工作了:

%MAVEN_JAVA_EXE% %MAVEN_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf" "-Djava.home=%JAVA_HOME%" "-Dmaven.home=%M2_HOME%" %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%

注意:这是mvn在命令行上使用的,不适用于Eclipse。


嘿,您不必去解释每个步骤。请参阅如何回答这一点
mtk 2012年

这似乎是一种hack(但是,嘿……如果它对您有用!),但是有趣的是,maven命令行选择了错误的java主页-这是我们当前的问题。
plasma147

2

我通过将Installed JRE的位置更改为JDK本身中存在的目录来解决了该问题。设置适当的JAVA_HOME环境变量值不能解决问题。

就我而言,有两个目录

  • C:\Program Files\Java\jdk1.7.0_03 --> For JDK

  • C:\Program Files\Java\jre7 --> For JRE

最初,我C:\Program Files\Java\jre7在Eclipse中设置为Installed JRE,并且在Maven(Ant运行正常)的情况下遇到相同的错误。

通过将已安装的JRE更改C:\Program Files\Java\jdk1.7.0_03\jre7为Eclipse中的已安装JRE,可以解决此问题。



2

听起来Maven正在使用JRE,而不是JDK。也许您在安装JDK之前就安装了Maven?

检查设置文件。一共有三个,系统,用户和项目。它很可能在安装配置($ M2_HOME / conf / settings.xml)中,或者在每用户配置($ {user.dir} /。m2 / settings.xml)中。


2

仅Eclipse设置

请执行以下步骤:

  1. 右键单击Eclipse项目属性

  2. Java构建路径 →库

  3. 选择JRE系统库→单击Edit按钮

  4. 单击“已安装的JRE ...”按钮

  5. 将JRE编辑为:设置JRE Home = JAVA_HOME或JAVA_HOME \ jre

屏幕截图:

在此处输入图片说明


这对我有用,谢谢。我将JRE主页更改为JDK文件夹。
LadyBernkastel 2014年

1

右键单击菜单项目属性Java构建路径

选择JRE系统路径→ 编辑。选择工作区默认JRE,并将其指向JDK> 1.4。


1

使用菜单窗口首选项Java已安装的JRE执行环境 ->单击右侧的复选框。


1

解决方案很简单。有时Eclipse Windows首选项Java已安装的JRE指向C:\Program files\Java\jre

当我将其更改C:\Program files\Java\JDK 6.0\jre为100%有效时。


1

正如其他人提到的那样,Eclipse 窗口首选项...Java已安装的JRE应该指向您已安装的JDK而不是 JRE。只有这样,它才能找到../lib错误消息中提到的文件夹。

即使这样,问题也可能再次发生。在Eclipse v4.2(Juno)中,我的出路是执行菜单Maven更新项目...之后问题消失了。

我怀疑原因是一些Eclipse生成的文件(.classpath,.project,.preferences)在我遇到这些问题的项目的Subversion中。因此,SVN更新引入了问题,Eclipse中Maven的配置更新再次解决了该问题。

真正的解决方案:省略Eclipse从版本控制生成的.file,并让Maven Eclipse插件处理项目配置。(欢迎其他指针/建议)




1

转到Eclipse的菜单窗口首选项...Java已安装的JRE应该指向您已安装的JDK,而不是JRE。


但这也是以前的许多答案。
Peter Mortensen

0

您还可以确保Eclipse具有所有更新的更改。为此,右键单击您的项目,然后按“刷新”菜单项。


0

许多其他答案告诉您将Eclipse指向JDK而不是JRE。

这是一个更具体/清晰的答案(比我在这里的任何答案中看到的还要多),有关如何执行此操作的分步说明: 如何安装JDK?

这就是解决我同样问题的方法。


0

确保您的eclipse.ini中的“ -vm”位于两条单独的行上,即:

-vm
C:\Program Files\Java\jdk1.6.0_06

0

我猜想,编译器的位置是在POM中定义的,用于使编译器插件位于显示的JRE位置,而不是JAVA_HOME指向的JDK位置。


@Robin我到底应该在哪里寻找?聚甲醛看起来好像没什么问题<groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.6</source> <target>1.6</target>
甘道夫StormCrow

如果没有定义<executable>,则不是导致您出现问题的原因,除非您要查看的pom继承自定义了它的父pom。
罗宾

定义可执行文件时,还必须将<fork>设置为true。
罗宾2010年

0

你需要指出JAVA_HOMEmvn.ini(它在Maven的文件夹/bin),以及您的问题就会消失。


0

如果设置了JAVA_HOME,问题仍然存在,请尝试以下操作。

(在新安装的PC上,我遇到了同样的问题。)

假设您正在使用Eclipse。

  • 打开窗口首选项Java已安装的jre's。删除那里所有的东西,添加想要使用的东西(JDK,没有JRE!)
  • 在同一窗口中,打开maven-installations,将您下载并提取的Maven安装添加到某处。(请勿使用嵌入式Maven安装。它具有一些已知的错误。)

就这样。您的项目不会遭受此类问题的困扰。


0

由于JUnit版本,我有同样的错误。我有三个3.8.1,现在我已更改为4.8.1。

因此解决方案是:

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

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

0

我将maven-compiler-plugin的配置更改为add executablefork其值为true。

<configuration>
    <fork>true</fork>
    <source>1.6</source>
    <target>1.6</target>
    <executable>C:\Program Files\Java\jdk1.6.0_18\bin\javac</executable>
</configuration>

它为我工作。


0

Echo %JAVA_HOME%然后再做mvn --version

JRE路径应该是相同的......然后进入菜单窗口首选项Java的安装JRE的位置应该是一样什么Java_Home是显示。


0

转到“ 属性”对话框,然后右键单击该项目。

在“ 链接的资源”中,添加一个名为JAVA_HOME的新路径,并将其放置在您的JDK位置,例如“ C:\ Program Files \ Java \ jdk1.8.0_73”。

就这样!!


我不认为您应该添加任何变量..只需将Run Seetings下的JDK配置更改为工作区JDK
Phani,2016年

0

解决这个问题的方法非常简单...

如果您没有Ant构建文件,请生成它。在Eclipse中,您可以轻松地创建一个Ant文件。

请参考链接以创建Ant构建文件[ http://www.codejava.net/ides/eclipse/how-to-create-ant-build-file-for-existing-java-project-in-eclipse]

现在按照给定的步骤进行操作:

1)在视图窗口中的Ant视图中添加您的Ant构建文件。

2)右键单击您的Ant构建文件,然后选择“运行方式”和该“ Ant构建”中的第二个选项。

3)现在,将打开一个对话框,其中包含各种选项和选项卡。

4)选择“ JRE”选项卡。

5)您将看到三个单选按钮,它们将选择JRE或JDK作为选项。

6)仔细检查单选按钮选项是否选择了JRE,然后将其更改为JDK

7)点击应用。

而已...!!!

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.