2013-03-05 153 views
22

我在eclipse中使用maven创建了一个webapp项目。当我在命令提示符下运行命令mvn包时,它显示出错信息。Maven包编译错误

[ERROR] COMPILATION ERROR : 
[INFO] ------------------------------------------------------------- 
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK? 
[INFO] 1 error 
[INFO] ------------------------------------------------------------- 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 4.310s 
[INFO] Finished at: Tue Mar 05 14:32:23 IST 2013 
[INFO] Final Memory: 16M/218M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.0:compile (default-compile) on project Compilation fa 
ilure 
[ERROR] ***No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?*** 
[ERROR] -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException 

我试图改变jdk和jre。但不工作。仍然显示相同的错误

+0

在控制台中,你的'javac'输出是什么? – Raptor 2013-03-05 09:40:43

+0

你运行过'mvn -e package'吗? – orique 2013-03-05 09:41:21

+4

您应该仔细阅读错误消息:** [错误] ***在此环境中不提供编译器。也许你正在运行JRE而不是JDK?*****。我会建议检查JAVA_HOME,如果它指向一个JDK和** NOT **到JRE。 – khmarbaise 2013-03-05 19:34:06

回答

46

Windows 7 - 64位,有一个权限问题,它会阻止安装程序将文件C:\Program Files\Java\jdk1.6.xx\lib\tools.jar解压缩到您的本地。这个jar文件是什么maven-compiler-plugin 3.x版本使用,而不是通常javac

解决方案: 运行,作为管理员,而Java JDK安装!并确保tools.jar正坐在C:\Program Files\Java\jdk1.6.xx\lib\

如果您正在使用M2E的Maven集成插件,你想看到的文件是可见通过以下步骤到Eclipse在Eclipse:

  • 去窗口 - >首选项 - > Java - >已安装的JRE
  • 选择您正在使用的JDK(C:\ Program Files \ Java \ jdk1.6.xx)
  • 按Edit查看jars的列表,包括tools.jar,你可以添加它作为添加外部JAR

然后配置通过这些步骤来运行行家:

  • 运行 - >设置 - 运行>填写姓名,基本目录和目标。
  • 然后在同一个窗口移动到JRE选项卡并指向JDK \ jdk1.6.xx \
+2

+1 - 完美答案..非常感谢。它帮助.. :) – LPD 2013-04-25 09:16:55

+0

你最后的回答比当前版本好很多。我回到这里来参考,不得不去编辑历史,以了解解决方案。希望如果这恢复回来。谢谢 – LPD 2013-05-03 09:58:36

+0

@LPD谢谢你提请我注意。我希望现在更完整!尽管你可以省略包括外部罐子的步骤,但我没有看到它的工作。 – Sam 2013-05-03 13:06:44

1

在我的情况下,错误“没有编译器在这种环境下提供的。也许你正在运行在JRE上而不是在JDK上“是由于JRE安装在与JDK默认位置不同的位置。

在64位linux下运行,我在Oracle的64位JDK SE 1.6.0_45上安装了/opt/java。 32位和64位JRE的安装位置分别为/opt/java/jre32/opt/java/jre64,其中包含一个jre符号链接:(即。ln -s jre64 jre),因此jre -> ./jre64 (meaning/opt/jdk/jre was a symlink referencing/opt/jdk/jre64)。

一旦我将jre64重命名为jre(即rm jre ; mv jre64 jre ; ln -s jre jre64),此问题就消失了;我能够使用maven构建(netbeans内部)。

Maven似乎正在查看JRE路径,并说“jre64不是JDK安装中默认JRE的正确名称,所以假设JDK不存在于../”),这会阻止它解析包含tools.jar的JDK lib目录的位置等。

尚未对其进行测试,但如果JRE不在默认位置(或或许不在%JAVA_HOME%\jre目录中)。如果安装了JDK和JRE,则Oracle的安装程序想要在%JAVA_HOME%\jre6处安装JRE,而不是%JAVA_HOME%\jr e。这可能是因为JDK卸载过程需要\jre目录;如果JRE已安装在\jre目录中的JDK JRE的顶部,而不是在\jre 6上,卸载JRE后卸载JDK将会失败,除非\ jre目录被复制,JRE被卸载并且\jre副本为恢复到\jre

+1

当maven作为Windows Server 2008 R2上的Jenkins作业的一部分运行时,我得到此错误。我已经在D:驱动器上安装了Java。将Java重新安装到C上的默认位置(并更新JAVA_HOME和Jenkins配置)之后,编译的作业没有错误。 – user2251060 2013-10-08 16:18:37

+1

在同一个Jenkins主机上再次遇到此问题,但现在为maven 3工作。可以从命令行构建好。在为作业的Maven配置选项添加-X后,我看到maven-resources-plugin具有java.home到C:\ Program Files \ Java \ jre7,这是与JDK一起安装的JRE。我卸载了单独的JRE,现在java.home = C:\ Program Files \ Java \ jdk1.7.0_45 \ jre,错误消失了。 – user2251060 2013-12-04 13:12:40

3

什么工作对我来说(32位Windows 7)是以下添加到您的PATH环境变量:

%JAVA_HOME%\ lib中;

+0

这是最简单的解决方案。我只是将C:\ Program Files \ Java \ jdk1.8.0_60 \ lib添加到PATH变量的末尾,并且我的jenkins构建完成了。 – GamerJ5 2016-06-29 05:15:19

3

试试这个。转到窗口 - >首选项 - > Java - >已安装的JRE。

双击安装JRE中的JRE。

在JRE Home中给出JDK路径(例如,C:\Program Files\Java\jdk1.7.0_80\),并将JRE名称指定为JDK。 点击完成,然后确定。

对我来说它工作。

11

转到'运行时配置'并将JRE配置为JDK。

Select the right JDK for your Runtime

或者作为@PawanKumarBaranwal建议,设置默认的JDK。但是,如果您配置了多个JRE,请注意。

Select default JRE

+1

对我而言,情况正是如此。现在一切工作正常后,我改变为jdk。 – drochora 2016-05-03 07:20:02

1

转到preferences>installed JRE>

然后单击add

选择 C:\program files\java\

enter

它会搜索其他的JRE比JDK,然后选择究竟是不是小号当选

-1

我正在使用maven plugin for Eclipse(V3.3),并且一直在努力解决这个错误。我终于找到了与过时的java源代码链接的解决方案:它与JRE或JDK无关(我使用JRE 1.7)。

我在其他论坛上发现这是maven-compiler-plugin中的一个已知问题(V3.3和3.5.1的结果相同)。

所以,我只是手动重新编译陈旧的源代码并再次运行目标,这次没有任何问题。

为了弄清楚陈旧的来源,运行带选项-X(调试)的目标,并寻找与项目

[DEBUG] Stale source detected: 

表示Java类文件开始(手动重新编译......)。

希望这可以是有用的,因为由maven编译器给出的消息使我在错误的方向搜索(玩JRE,JDK,JAVA-HOME等)。

1

有几个选项可以指定。

步骤:右键在项目浏览器中的项目转到运行 - >运行配置 - >点击Maven Build - >点击你的构建配置/或创建一个新的配置。你会看到下面给出的快照窗口,点击JRE选项卡。

您看到您有3个选项1)工作空间默认JRE 2)执行环境3)替代JRE 1)工作空间默认JRE从顶部的“窗口”菜单设置 - >首选项 - > Java - >安装的JRE-这里你可以添加你的JDK 2)执行环境JDK可以在pom.xml中设置

<build> 
<plugins> 
    <plugin> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <version>3.1</version> 
     <configuration> 
      <fork>true</fork> 
     <executable>C:\Program Files\Java\jdk1.7.0_45\bin\javac.exe</executable> 
    </configuration> 
</plugin> 

3)替代JRE可以用来从目录中选择一个JDK

1

Go to windows -> Preferences -> Java -> Installed JREs

可能是JRE已添加 enter image description here

click on Add -> Standard VM -> Next -> Directory

,并在我的案件路径浏览JDK是C:\Program Files\Java\jdk1.8.0_111

then Click on finish.

你会看到窗口像这样

enter image description here

select JDK -> Apply -> Ok

和你做。

0

to set path in below manner

保持JDK的路径在路径变量首位,让其他的java的路径将被忽略。编译错误将被解决。

+0

尽管这个链接可能回答这个问题,但是在Stack Overflow中只提供链接的答案,你可以通过获取链接的重要部分并将其放入你的答案来改进这个答案,这确保你的答案仍然是一个答案,如果链接获得改变或删除:) – WhatsThePoint 2017-11-22 14:36:46