使用maven enforcer插件

jav*_*y79 18 java maven-plugin maven maven-enforcer-plugin

我想使用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

如果将我的配置更改为:

        <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>
Run Code Online (Sandbox Code Playgroud)

产生相同的错误.

Tho*_*mas 25

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

Maven的指导,配置更好地解释它:

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

  • 执行目标是[bound](http://maven.apache.org/enforcer/maven-enforcer-plugin/enforce-mojo.html)到生命周期阶段`validate`.因此,要执行`enforcer:enforce`,您只需键入`mvn validate`即可 (5认同)
  • 缺少配置文件,有没有一种方法来定义执行而不调用`validate`?我有一个场景,我_just_想要验证`requireReleaseDeps`,但在构建过程的这个阶段没有别的. (2认同)

Raj*_*Raj 18

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

<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>
Run Code Online (Sandbox Code Playgroud)

现在,当你这样做时mvn enforcer:enforce,它会从你的pom.xml中选择规则.


JFK*_*JFK 7

看到这些答案

您可以使用特殊的默认命令行执行ID,default-cli来调用它(请参阅Maven Docs),请参阅下面的示例.这至少适用于3.1.1,引用的文章说它应该适用于2.2.0+

mvn enforcer:enforce
Run Code Online (Sandbox Code Playgroud)

但是,如果您使用Maven 3.1.1 以上(我可以确认它在3.3.3中使用enforcer v 1.4.1),您可以使用新的@语法指定您希望的执行ID(参见Maven JIRA和上面的答案);

例如,对于下面的例子使用

mvn enforcer:enforce@dependency-convergence
Run Code Online (Sandbox Code Playgroud)

这是我的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>
      ...
Run Code Online (Sandbox Code Playgroud)