我想使用maven enforcer插件检查我的路径上是否有重复的类。我试过了here的例子。
但是当我像这样运行时:
mvn enforcer:enforce
我明白了:
无法执行目标 org.apache.maven.plugins:Maven的实施者 - 插件:1.0.1:执行 项目datapopulator上的(default-cli):参数'rules' 目标org.apache.maven.plugins:maven-enforcer-plugin:1.0.1:enforce are
缺失或无效
有没有办法正确使用它?
编辑#1
如果将我的配置更改为:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.0.1</version>
<executions>
<execution>
<id>enforce-versions</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<AlwaysPass />
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
产生同样的错误。
答案 0 :(得分:23)
您的第一个版本不起作用的原因是执行标记内的插件配置与执行标记外的插件配置之间存在差异。仅当您的插件由完整Maven构建的特殊阶段触发时才会执行。
Maven guide to configuration更好地解释了它:
标记内的配置与外部的配置不同,因为它们不能从直接命令行调用中使用。相反,它们仅在调用它们绑定的生命周期阶段时应用。或者,如果您将配置部分移到执行部分之外,它将全局应用于插件的所有调用。
答案 1 :(得分:15)
尝试这样做,将配置移到执行外部,这样它就不会生命周期阶段。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.0.1</version>
<executions>
<execution>
<id>enforce-versions</id>
<goals>
<goal>enforce</goal>
</goals>
</execution>
</executions>
<configuration>
<rules>
<AlwaysPass />
</rules>
<fail>true</fail>
</configuration>
</plugin>
现在当你执行mvn enforcer:enforce
时,它会从你的pom.xml中选择规则。
答案 2 :(得分:7)
请参阅这些answers
您可以使用特殊的默认命令行执行ID,default-cli来调用它(请参阅Maven Docs),请参阅下面的示例。这至少适用于3.1.1,引用的文章说它应该适用于2.2.0 +
mvn enforcer:enforce
但是,如果您使用 以上 Maven 3.1.1(我可以确认它在3.3.3中使用enforcer v 1.4.1确认),您可以指定执行ID您希望使用新的@语法(请参阅Maven JIRA和上面的答案);
e.g。对于下面的示例,请使用
mvn enforcer:enforce@dependency-convergence
这是我的pom的片段;
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.4.1</version>
<executions>
<execution>
<id>dependency-convergence</id>
<phase>install</phase>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<DependencyConvergence />
</rules>
<fail>true</fail>
</configuration>
</execution>
<execution>
<id>default-cli</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<DependencyConvergence/>
</rules>
<fail>true</fail>
</configuration>
</execution>
</executions>
</plugin>
...
答案 3 :(得分:3)
我不知道为什么它不适用于执行中的配置,但这对我有用:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>1.0</version>
<configuration>
<rules>
<banDuplicateClasses>
<findAllDuplicates>true</findAllDuplicates>
</banDuplicateClasses>
</rules>
<fail>false</fail>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo</groupId>
<artifactId>extra-enforcer-rules</artifactId>
<version>1.0-alpha-1</version>
</dependency>
</dependencies>
</plugin>