Maven enforcer插件缺失或规则无效

时间:2014-07-18 14:17:54

标签: java maven maven-3 pom.xml maven-enforcer-plugin

我正在尝试为maven设置enforcer插件以强制执行最低Java版本。但是,每当我尝试运行mvn enforcer:enforce时,我都会得到:

  

目标org.apache.maven.plugins的参数'rules':maven-enforcer-plugin:1.3.1:强制缺失或无效

以下是我的pom文件的相关部分:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-enforcer-plugin</artifactId>
    <version>1.3.1</version>
    <executions>
        <execution>
            <id>enforce-java</id>
            <phase>validate</phase>
            <goals>
                <goal>enforce</goal>
            </goals>
            <configuration>
                <rules>
                    <requireJavaVersion>
                        <version>(1.7.0-20,)</version>
                    </requireJavaVersion>
                </rules>
            </configuration>
        </execution>
    </executions>
</plugin>

我还尝试将<requireJavaVersion>块替换为<alwaysPass/>,以防某些内容无效,但仍然以相同的错误失败。

3 个答案:

答案 0 :(得分:22)

可能是您使用的是无效的规则名称。查看rules页面。 规则名称区分大小写。 虽然情况并非如此。

----编辑----

请注意,POM配置的执行ID为enforce-java,并且该执行绑定到生命周期的validate阶段。命令mvn enforcer:enforce正在运行目标,而不是生命周期中的阶段。您在POM中提供的配置不适用于enforcer:enforce目标。

有两种方法可以完成这项工作。您选择哪一个取决于您的需求。

  1. 如果您只是尝试在不运行整个构建的情况下测试enforcer插件配置,请运行mvn validate
  2. 如果要求mvn enforcer:enforce有效,请将执行ID更改为default-cli

答案 1 :(得分:0)

在尝试构建vertx Workshop项目时遇到了同样的错误。事实证明,该错误主要是与执行程序插件版本有关的问题。以下配置为我解决了此问题。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-enforcer-plugin</artifactId>
  <version>3.0.0-M3</version><!--$NO-MVN-MAN-VER$-->
  <executions>
    <execution>
      <id>enforce-java</id>
      <phase>enforce</phase>
      <goals>
        <goal>enforce</goal>
      </goals>
      <configuration>
        <rules>
          <requireJavaVersion>
            <version>(1.8.0,)</version>
          </requireJavaVersion>
        </rules>
      </configuration>
    </execution>
  </executions>
</plugin>

答案 2 :(得分:0)

在我的情况下,问题是我将强制执行程序配置放入Maven配置文件的构建部分中,而该配置文件在我运行mvn validate时尚未构建。一个简单的mvn validate -P correctProfile为我修复了它。最后,我将其放入多模块应用程序的父项目中,将字节码执行器规则的可传递搜索设置为true:<searchTransitive>true</searchTransitive>,并验证了子项目中不正确的依赖关系确实导致构建失败。 / p>