maven enforcer插件的用法

我想使用maven enforcer插件检查我的路径上是否有重复的类。 我从这里试过这个例子。

但当我这样运行时:

mvn enforcer:enforce

我明白了:

无法在项目datapopulator上执行目标org.apache.maven.plugins:maven-enforcer-plugin:1.0.1:enforce(default-cli):目标org.apache.maven.plugins的参数’rules’:maven-enforcer -plugin:1.0.1:强制执行缺失或无效

有没有办法正确使用它?

编辑#1

如果将我的配置更改为:

   org.apache.maven.plugins maven-enforcer-plugin 1.0.1   enforce-versions  enforce      true     

产生相同的错误。

您的第一个版本无法工作的原因是执行标记内的插件配置与执行标记外的插件配置之间存在差异。 仅当您的插件由完整Maven构建的特殊阶段触发时才会执行执行。

Maven配置指南更好地解释了它:

标记内的配置与外部的配置不同,因为它们不能从直接命令行调用中使用。 相反,它们仅在调用它们绑定的生命周期阶段时应用。 或者,如果将配置部分移到执行部分之外,它将全局应用于插件的所有调用。

试试这个,将配置移到执行外部,这样它就不会生命周期阶段了。

  org.apache.maven.plugins maven-enforcer-plugin 1.0.1   enforce-versions  enforce        true   

现在当你执行mvn enforcer:enforce ,它会从你的pom.xml中选择规则。

看到这些答案

您可以使用特殊的默认命令行执行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和上面的答案);

例如,以下示例使用

 mvn enforcer:enforce@dependency-convergence 

这是我的pom的一个片段;

    org.apache.maven.plugins maven-enforcer-plugin 1.4.1   dependency-convergence install  enforce      true    default-cli  enforce      true     ... 

我不知道为什么它不适用于执行中的配置,但这对我有用:

   org.apache.maven.plugins maven-enforcer-plugin 1.0    true   false    org.codehaus.mojo extra-enforcer-rules 1.0-alpha-1