如何使用Maven Enforcer插件?

23
我想使用Maven Enforcer插件来检查路径上是否有重复的类。
我尝试了这里的示例。
但是当我像这样运行它时:
mvn enforcer:enforce 我得到了这个错误:
Failed to execute goal org.apache.maven.plugins:maven-enforcer-plugin:1.0.1:enforce (default-cli) on project datapopulator: The parameters 'rules' for goal org.apache.maven.plugins:maven-enforcer-plugin:1.0.1:enforce are missing or invalid
有没有正确使用它的方法?
编辑#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>

产生相同的错误。
4个回答

28
你的第一个版本不能正常工作的原因是 <execution> 标签内部和外部的插件配置存在差异。只有在完整的 Maven 构建的特定阶段触发插件时,才会使用 <execution>
Maven 配置指南更好地解释了它:(链接)

<execution> 中的配置与外部配置不同,因为它们不能从直接命令行调用中使用。相反,它们只在绑定到它们的生命周期阶段被调用时应用。或者,如果将配置部分移动到 <executions> 之外,则会全局应用于插件的所有调用。


6
强制执行目标 [bound](http://maven.apache.org/enforcer/maven-enforcer-plugin/enforce-mojo.html) 与生命周期阶段 validate 相关联。因此,要执行 enforcer:enforce,您只需键入`mvn validate` - rwitzel
2
除了调用“validate”之外,有没有一种定义执行的方法?我有一个场景,在构建过程的这个阶段,我只想验证“requireReleaseDeps”,而不想验证其他任何东西。 - Snekse

22

尝试将配置移动到executions之外,这样它就不会绑定到生命周期阶段。

<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文件中提取规则。


10

看到这些答案

你可以使用特殊的默认命令行执行ID default-cli 来调用它(请参见Maven文档),请参见下面的示例。这至少在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文件的一部分;
<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>
      ...

我刚刚提交了一个拉取请求,以澄清有关此事的文档:https://github.com/apache/maven-site/pull/7 - Francois Marot

4
我不知道为什么在执行中使用配置无法正常工作,但是这个方法对我有效:

        <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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接