无法执行目标 org.apache.maven.plugins:maven-enforcer-plugin

31

我得到了一个Maven Spring项目,但当我尝试运行它时,却无法运行... 对此有一些想法...
下面是错误消息:

BUILD FAILURE
------------------------------------------------------------------------
Total time: 4.532s
Finished at: Wed Jul 26 16:04:06 COT 2017
Final Memory: 17M/196M
------------------------------------------------------------------------
Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:1.4.1:enforce
(enforce-versions) on project SIMI: Some Enforcer rules have failed. Look above for
specific messages explaining why the rule failed. -> [Help 1]

To see the full stack trace of the errors, re-run Maven with the -e switch.

使用 -X 开关重新运行 Maven 以启用完整的调试日志记录。

有关错误和可能解决方案的更多信息,请阅读以下文章:[帮助 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException


这是POM.XML文件。 - Hsneider Salgado Neid
1
你能贴出完整的堆栈跟踪吗?它说“向上查找特定消息”。还能贴出父级的pom.xml吗?我相信那里包含了实际的强制执行插件,因为这个pom文件中没有。 - yaswanth
1
没有上面的堆栈跟踪,很难确定哪个执行器规则失败了。 - Mig82
16个回答

31

可能导致此问题的一件事是,在您的项目中设置了一个POM文件所需的Java或Maven版本。您应该找到它...但是如何找到呢?也许您在项目中找不到任何执行器,就像我一样......(我遇到了同样的问题,并且因为我的项目POM中未定义执行器插件,所以我找不到它而感到困惑)。

执行器插件在您的“有效的pom”中,您应该检查一下。有效的POM是从超级POM + 项目POM制作的配置文件。 Maven使用此配置文件来执行相关目标。 它帮助开发人员在自己的pom.xml中指定最少的配置细节。尽管可以轻松地覆盖配置。

有两种方法显示有效的POM:1- 使用Maven命令,运行此命令:

 mvn help:effective-pom

2- 使用你的集成开发环境(IDE):在Maven窗口中,右键单击项目节点,选择显示有效的POM文件(这取决于你的IDE)。

找到你的依赖后,就可以在项目中找到并进行更改。对于我来说,我的有效POM包含强制执行插件,其requireMavenVersion规则要求使用Java 1.8版本。所以,我将项目的JDK版本更改为1.8,幸运地解决了问题。

希望这个回答能够帮到你。


1
这个回答帮助了我,对我来说是版本问题,当我改变版本时它就被修复了。 - Tayab Hussain
你的意思是先找到项目中使用的强制插件,但是错误信息已经给出了这个信息:maven-enforcer-plugin:1.4.1。 - navylover

21

您需要解决问题的根本原因,这可能是由于您的某些依赖项、mvn/java版本之间的冲突引起的,有很多可能的原因。

您可以运行mvn dependency:tree并检查列表中是否有来自不同包的相同库的2个不同版本或实现。通常您会有一个父POM或框架中的一个依赖项与您添加到POM中的依赖项不兼容。

但是,尽管出现此执法错误,您的项目仍然可以完美构建和运行,因此这是一种忽略错误的解决方法。

要跳过强制执行(不总是有效)

mvn clean install -Denforcer.skip=true

如果出现错误,继续构建

mvn clean install -Denforcer.fail=false

可能有一些方法可以从执行器规则中排除特定的库,这比只跳过所有内容要好。


7
如果您使用的是版本为1.4.1maven-enforcer-plugin,并且导致出现此错误,则需要使用旧版本的maven-enforcer-plugin。您可以在下面找到Maven依赖项:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>1.3.1</version>
</plugin>

以下链接可找到其他版本。

https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-enforcer-plugin

此外,请检查您的Maven版本。如果您使用的是maven 3.0.x,则需要使用maven-enforcer-plugin 1.4.1


5
有可能有人正在执行特定的Maven版本。
如果你看到以下信息:
[WARNING] Rule 0: org.apache.maven.plugins.enforcer.RequireMavenVersion failed with message: Detected Maven Version: 3.5.4 is not in the allowed range [3.5.2,3.5.2]。
那么请将你的Maven安装更改为指定范围内的版本。在这个例子中,只允许使用3.5.2版本。

关于maven-enforcer-plugin非常奇怪的一点是,即使将<rule><level>设置为ERROR,错误(失败的规则)仍被记录为[WARNING]。 - mirec

3

这个错误很可能是由于pom文件中指定的java版本与你的系统中的java不匹配所致。我在我的系统中安装了Java 16,但pom指向Java版本8。

有两种方法可以解决这个问题:

  1. 将pom文件中的java版本更新为你电脑上安装的java版本,但这可能会导致很多依赖关系问题。
  2. 卸载你系统中已安装的java,并重新安装pom文件中指定的java版本。你可以按照下面的步骤进行操作:

使用以下命令检查你系统中的java版本:

java -version

然后检查您pom文件中定义的Java版本。它应该类似于:

<project.java.version>1.8</project.java.version>

安装JDK 8。


2

我遇到了这个问题,因为Java(java)是8版本,而Java编译器(javac)是11版本。

如果需要手动在不同的版本之间切换,这对Windows用户来说很典型。

请先检查版本:

java -version
javac -version

如果使用IDE,例如IntelliJ Idea,则建议仔细研究项目设置。也许完全删除IDE生成的文件并重新导入项目是有意义的。

1
在进行了一些研究后,找到了一个答案。如果您使用的是IntelliJ,请按如下步骤操作:

转到 设置 > 构建 > Maven > 设置Maven主目录。

enter image description here


1
我遇到了同样的问题,并通过修复pom版本来解决它。以下命令在所有子pom上都没有正确运行,导致不同的pom版本。 'mvn versions:set -DnewVersion=${NEW_VERSION} versions:commit' 如果有依赖的pom,请检查所有的pom是否具有相同的版本。

1
检查您的Maven版本,例如,如果您正在安装Apache-CXF 3.6并且您的Maven版本为3.0.5,则会出现错误。 如果您正在安装Apache-CXF 3.6,则Maven的最低版本必须为3.1,Java的最低版本必须为8。

1

你应该检查是否有两个不同版本的相同构件。当我想在一个依赖项目上添加新的Maven依赖项时,我遇到了这个问题,因为我已经在另一个依赖项目中添加了不同版本的依赖项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接