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>
我还尝试用<alwaysPass/>
替换<requireJavaVersion>
块,以防某些内容无效,但仍然失败并出现相同的错误。
【问题讨论】:
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
。
【讨论】:
我最初使用的是default-cli
使 mvn enforcer:enforce
正常工作。但是mvn validate
总是会成功,即使强制要求没有得到满足。
您应该检查您提供的 Java 版本范围。我想你想做这样的事情:´default-cli
为我修复了它,谢谢。我喜欢 Maven 需要很难找到的奥术咒语才能让最简单的事情发挥作用。
公平地说,是execution
使此配置复杂化。如果您将配置添加到插件而不是特定执行,enforcer:enforce
也将起作用。像这样的东西:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-enforcer-plugin</artifactId> <version>3.0.0-M2</version> <configuration> <rules> <dependencyConvergence/> </rules> </configuration> </plugin>
【参考方案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:<searchTransitive>true</searchTransitive>
,并验证了子项目中不正确的依赖确实会导致构建失败。
【讨论】:
以上是关于Maven 强制插件缺少或无效规则的主要内容,如果未能解决你的问题,请参考以下文章
如何强制将所有 404(或每个页面,无论是不是无效)重定向到主页?
即使输入文本有效(Javascript或Jquery),如何强制输入文本无效