Maven包编译错误
Posted
技术标签:
【中文标题】Maven包编译错误【英文标题】:Maven Package Compilation Error 【发布时间】:2013-02-19 15:40:07 【问题描述】:我在 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。但不工作。仍然显示相同的错误
【问题讨论】:
在控制台中,你的javac
输出是什么?
你跑mvn -e package
了吗?
您应该仔细阅读错误信息:[ERROR] ***此环境中未提供编译器。也许您在 JRE 而不是 JDK 上运行?*****。我建议检查 JAVA_HOME 以及它是否指向 JDK 和 **NOT 指向 JRE。
该消息与您的帖子有矛盾之处。
在命令行上,执行mvn -version
。确保“Java home”之后列出的 java 安装是 jdk
【参考方案1】:
在 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) 按编辑查看包含 tools.jar 的 jar 列表,您可以将其添加为 Add External JAR然后通过这些步骤配置maven运行:
运行->运行配置->填写名称、基本目录和目标。 然后在同一窗口中移动到 JRE 选项卡并指向 JDK \jdk1.6.xx\【讨论】:
您的上一个答案比当前版本好很多。我回到这里作为参考,不得不通过编辑历史来理解解决方案。如果那恢复原状将不胜感激。谢谢 @LPD 感谢您引起我的注意。我希望它现在更完整!虽然您可以省略包含外部 jar 的步骤,但我已经看到它在没有它的情况下也可以工作。 也适用于 Windows 8 / 32 位。 我在 Windows 7 上。我已按照所有步骤操作,但仍然没有运气......关于编译器的相同错误消息。 JAVA_HOME 已设置并且它指向 JDK。我正在使用 1.6.0_45。 不,但这不是必需的。我在 Installed JRE 中设置了 JDK,但它没有在 Maven Build Configuration 的 JRE 选项卡中设置。我的错...谢谢!【参考方案2】:在我的情况下,错误“此环境中未提供编译器。也许您在 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/jrewas a symlink referencing
/选择/jdk/jre64)。
一旦我将 jre64 重命名为 jre(即rm jre ; mv jre64 jre ; ln -s jre jre64
),这个问题就消失了;而且我能够使用 maven(在 netbeans 内部)进行构建。
Maven 似乎正在查看 JRE 路径,说“jre64 不是默认 JRE-inside-of-JDK 安装的正确名称,因此假设 ../ 处不存在 JDK”),其中会阻止它解析包含 tools.jar 等的 JDK lib 目录的位置。
尚未对其进行测试,但如果 JRE 不在默认位置(或者可能不在 %JAVA_HOME%\jre
目录中),则在 Windows 下可能会发生同样的事情。如果同时安装了 JDK 和 JRE,Oracle 的安装程序希望将 JRE 安装在 %JAVA_HOME%\jre6
,而不是 %JAVA_HOME%\jr
e。那可能是因为JDK卸载过程需要\jre
目录;如果 JRE 已安装在 JDK 的 JRE 之上的 \jre
目录中,而不是 \jre
6,则在卸载 JRE 后卸载 JDK 将失败,除非复制 \jre 目录,卸载 JRE,并且\jre
副本恢复为\jre
。
【讨论】:
当 maven 在 Windows Server 2008 R2 上作为 Jenkins 作业的一部分运行时,我遇到了这个错误。我在 D: 驱动器上安装了 Java。将 Java 重新安装到 C 上的默认位置(并更新 JAVA_HOME 和 Jenkins 配置)后,作业编译没有错误。 在同一台 Jenkins 主机上再次遇到此问题,但现在用于 maven 3 工作。可以从命令行构建良好。在为作业添加 -X 到 maven 配置选项后,我看到 maven-resources-plugin 将 java.home 指向 C:\Program Files\Java\jre7,这是与 JDK 一起安装的 JRE。我卸载了单独的 JRE,现在 java.home=C:\Program Files\Java\jdk1.7.0_45\jre 并且错误消失了。【参考方案3】:对我有用的(32 位 Windows 7)是将以下内容添加到您的路径环境变量中:
%JAVA_HOME%\lib;
【讨论】:
这是最简单的解决方案。我只是将 C:\Program Files\Java\jdk1.8.0_60\lib 添加到 PATH var 的末尾,然后我的 jenkins 构建就通过了。【参考方案4】:试试这个。转到窗口 --> 首选项 --> Java --> 已安装的 JRE。
双击已安装的 JRE 中的 JRE。
在 JRE Home 中给出 JDK 路径(例如,C:\Program Files\Java\jdk1.7.0_80\
),并给出 JRE 名称为 JDK。
单击完成,然后单击确定。
对我来说它有效。
【讨论】:
【参考方案5】:转到您的“运行时配置”并将您的 JRE 配置为 JDK。
或者按照@PawanKumarBaranwal 的建议,设置您的默认 JDK。但请注意您是否配置了多个 JRE。
【讨论】:
这正是我的情况。现在我换成 jdk 后一切正常。【参考方案6】:转到preferences>installed JRE>
然后点击add
选择
C:\program files\java\
按enter
它将搜索除 jdk 之外的其他 jre,然后选择未选择的内容
【讨论】:
【参考方案7】:我正在为 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 等)。
【讨论】:
【参考方案8】:有几个选项可以指定。
步骤:在项目资源管理器中的项目上转到运行-> 运行配置-> 单击 Maven 构建-> 单击您的构建配置/或创建一个新配置。您将看到下面给定快照的窗口,单击那里的 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
【讨论】:
【参考方案9】:转到 windows -> 首选项 -> Java -> 已安装的 JRE
可能已经添加了 jre
点击添加 -> 标准虚拟机 -> 下一步 -> 目录
在我的案例路径中浏览 JDK 是 C:\Program Files\Java\jdk1.8.0_111
然后点击完成。
你会看到这样的窗口
选择 JDK -> 应用 -> 确定
你已经完成了。
【讨论】:
【参考方案10】:to set path in below manner
将 jdk 的路径保留在路径变量的第一位,这样其他 java 路径将被忽略。编译错误将得到解决。
【讨论】:
虽然此链接可能会回答问题,但 Stack Overflow 上不鼓励仅链接的答案,您可以通过获取链接的重要部分并将其放入您的答案来改进此答案,这样可以确保您的答案是如果链接被更改或删除,仍然是一个答案:)【参考方案11】:在创建第二个工作区以在单独的源代码分支中工作后,我遇到了一个奇怪的情况,我可以在新工作区的命令行中进行 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 中的第二个工作区中构建项目,而不仅仅是从命令行。
【讨论】:
【参考方案12】:检查您的安装 JDK 及其路径 - download link
检查环境变量的路径 - check
添加日食
windows->preferences->Java->installed JREs->add->standart VM -> JRE home (jdk path exmp:'C:\Program Files\Java\jdk1.8.0_221')
然后申请。
右击你的project -> properties -> select (Libraries -> JRE System libraries) -> edit -> choose workspace default JRE (JDK.1.8.0_221)
右键单击您的项目 -> Maven 更新 再次清理并安装项目。
【讨论】:
以上是关于Maven包编译错误的主要内容,如果未能解决你的问题,请参考以下文章
错误:编译 Java 文件时“包 com.fasterxml.jackson.databind 不存在”