我正在尝试为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/>
,以防某些内容无效,但仍然以相同的错误失败。
答案 0 :(得分:22)
可能是您使用的是无效的规则名称。查看rules页面。 规则名称区分大小写。 虽然情况并非如此。
----编辑----
请注意,POM配置的执行ID为enforce-java
,并且该执行绑定到生命周期的validate
阶段。命令mvn enforcer:enforce
正在运行目标,而不是生命周期中的阶段。您在POM中提供的配置不适用于enforcer:enforce
目标。
有两种方法可以完成这项工作。您选择哪一个取决于您的需求。
mvn validate
。 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>