Maven包编译错误

时间:2013-03-05 09:39:01

标签: java maven java-7

我在eclipse中使用maven创建了一个webapp项目。当我在命令提示符下运行命令mvn package时,它显示以下错误。

[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。但没有工作。仍然显示相同的错误

12 个答案:

答案 0 :(得分:47)

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可以看到该文件:

  • 转到窗口 - &gt;偏好 - &gt; Java - &gt;已安装JRE
  • 选择您正在使用的JDK(C:\ Program Files \ Java \ jdk1.6.xx)
  • 按编辑查看包含tools.jar的jar列表,​​您可以将其添加为Add External JAR

然后通过以下步骤配置maven运行:

  • 运行 - >运行配置 - &gt;填写名称,基本目录和目标。
  • 然后在同一窗口中移动到JRE选项卡并指向JDK \ jdk1.6.xx \

答案 1 :(得分:12)

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

Select the right JDK for your Runtime

或者@PawanKumarBaranwal建议,设置默认的JDK。但要注意是否配置了多个JRE。

Select default JRE

答案 2 :(得分:3)

对我(32位Windows 7)有用的是将以下内容添加到路径环境变量中:

%JAVA_HOME%\ lib中;

答案 3 :(得分:3)

试试这个。转到窗口 - &gt;偏好 - &gt; Java - &gt;已安装的JRE。

双击JRE,它位于已安装的JRE中。

在JRE Home中提供JDK路径(例如,C:\Program Files\Java\jdk1.7.0_80\),并将JRE名称指定为JDK。 单击Finish然后单击OK。

对我而言,它有效。

答案 4 :(得分:1)

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

在64位Linux下运行,我在/opt/java安装了Oracle的64位JDK SE 1.6.0_45。 32位和64位JRE安装在/opt/java/jre32/opt/java/jre64,带有jre符号链接:(即ln -s jre64 jre),因此jre -> ./ jre64 (meaning的/ opt / JDK / JRE was a symlink referencing /选择/ 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目录中),则在Windows下可能会发生同样的情况。如果同时安装了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

答案 5 :(得分:1)

转到preferences>installed JRE>

然后点击add

选择 C:\program files\java\

enter

它将搜索其他jre而不是jdk,然后选择未选择的内容

答案 6 :(得分:1)

有几个选项需要指定。

步骤:项目资源管理器中的项目正确转到运行 - &gt;运行配置 - &gt;单击Maven Build - &gt;单击您的构建配置/或创建一个新配置。您将在下面看到窗口作为给定的快照,单击那里的JRE选项卡。

您会看到有3个选项1)工作区默认JRE 2)执行环境3)备用JRE 1)工作区默认JRE由&#39; Window&#39;设置。菜单位于顶部 - &gt;偏好 - &gt; Java - &gt;已安装的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

答案 7 :(得分:1)

  

转到Windows - &gt;偏好 - &gt; Java - &gt;已安装的JRE

可能已经添加了jre enter image description here

  

点击添加 - &gt;标准VM - &gt;下一步 - &gt;目录

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

  

然后点击完成。

你会看到这样的窗口

enter image description here

  

选择JDK - &gt;申请 - &gt;确定

你已经完成了。

答案 8 :(得分:0)

to set path in below manner

将jdk的路径保留在路径变量的第一位,以便忽略其他java路径。编译错误将被解决。

答案 9 :(得分:0)

创建了第二个工作空间以在单独的源代码分支中工作之后,我遇到了一个奇怪的情况,我可以在新工作空间中通过命令行进行Maven构建,但不能在Eclipse中进行。我尝试按照其他人的描述将JRE配置设置为JDK,但还是没有运气。最后,我不得不搜索新工作区的.metadata目录的全部内容,以找到拒绝重新配置的有问题的文件。罪魁祸首是

.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.launching.prefs

尽管更改了配置,但它仍然指向错误的目录。我进行了手动编辑以提供正确的JDK名称和位置。我还编辑了

下的文件
.plugins/org.eclipse.debug.core/.launches

这些同样都指向JRE而不是JDK。完成这些编辑后,我可以从Eclipse中而不是仅从命令行在第二个工作区中构建项目。

答案 10 :(得分:0)

  1. 检查您的安装JDK及其路径-download link

  2. 检查环境变量的路径-check

  3. 添加日食 windows->preferences->Java->installed JREs->add->standart VM -> JRE home (jdk path exmp:'C:\Program Files\Java\jdk1.8.0_221')然后申请。

  4. 右键单击您的project -> properties -> select (Libraries -> JRE System libraries) -> edit -> choose workspace default JRE (JDK.1.8.0_221)

  5. 右键单击您的项目-> Maven更新 清理并再次安装项目。

答案 11 :(得分:-1)

我正在使用Eclipse(V3.3)的maven插件,并且正在努力解决这个错误一段时间。我终于找到了与陈旧的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等)。