Maven 强制插件缺少或无效规则

Posted

技术标签:

【中文标题】Maven 强制插件缺少或无效规则【英文标题】:Maven enforcer plugin missing or invalid rules 【发布时间】:2014-09-09 17:18:17 【问题描述】:

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

目标 org.apache.maven.plugins:maven-enforcer-plugin:1.3.1:enforce 的参数“规则”丢失或无效

这是我的 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>

我还尝试用&lt;alwaysPass/&gt; 替换&lt;requireJavaVersion&gt; 块,以防某些内容无效,但仍然失败并出现相同的错误。

【问题讨论】:

usage of maven enforcer plugin的可能重复 @acm 在我的情况下,解决方案是 default-cli 参数,这是此处接受的答案的一部分。在***.com/questions/6754974/… 中不太明显 不起作用,我总是收到错误无法在项目上执行目标 org.apache.maven.plugins:maven-enforcer-plugin:3.0.0-M3:enforce (default-cli):没有规则被配置。如果要禁用执行,请使用跳过标志。 This 这真的很有帮助。 【参考方案1】:

可能是您使用了无效的规则名称。查看rules 页面。 规则名称区分大小写。 虽然这里不是这样。

---- 编辑----

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

有两种方法可以完成这项工作。你选择哪一个取决于你需要什么。

    如果您只是想测试强制插件配置而不运行整个构建,请运行mvn validate。 如果要求 mvn enforcer:enforce 有效,则将执行 ID 更改为 default-cli

【讨论】:

我最初使用的是 和 但是当我在这里复制它时我做错了。即使使用有效的规则名称,我也会得到相同的错误。我编辑了帖子以更正此问题。 将 id 更改为 default-cli 使 mvn enforcer:enforce 正常工作。但是mvn validate 总是会成功,即使强制要求没有得到满足。 您应该检查您提供的 Java 版本范围。我想你想做这样的事情:´[1.7.0,)`. default-cli 为我修复了它,谢谢。我喜欢 Maven 需要很难找到的奥术咒语才能让最简单的事情发挥作用。 公平地说,是execution 使此配置复杂化。如果您将配置添加到插件而不是特定执行,enforcer:enforce 也将起作用。像这样的东西:&lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-enforcer-plugin&lt;/artifactId&gt; &lt;version&gt;3.0.0-M2&lt;/version&gt; &lt;configuration&gt; &lt;rules&gt; &lt;dependencyConvergence/&gt; &lt;/rules&gt; &lt;/configuration&gt; &lt;/plugin&gt;【参考方案2】:

我在尝试构建 vertx 工作室项目时遇到了同样的错误。事实证明,该错误主要是与执行器插件版本相关的问题。以下配置为我解决了这个问题。

<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>

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于Maven 强制插件缺少或无效规则的主要内容,如果未能解决你的问题,请参考以下文章

使用 maven 插件执行器规则失败

如何强制将所有 404(或每个页面,无论是不是无效)重定向到主页?

即使输入文本有效(Javascript或Jquery),如何强制输入文本无效

有没有办法通过 tslint 规则在 Typescript 类上强制执行方法返回类型?

如何强制关注第一个无效输入?

Maven:缺少工件presto