23

我想使用 Maven Enforcer 插件来检查我的路径上是否有重复的类。

我已经尝试过这里的示例。

但是当我这样运行它时:

mvn enforcer:enforce

我收到此错误:

无法在项目 datapopulator 上执行目标 org.apache.maven.plugins:maven-enforcer-plugin:1.0.1:enforce (default-cli):目标 org.apache.maven.plugins:maven-enforcer 的参数“规则” -plugin:1.0.1:enforce 丢失或无效

有没有办法正确使用它?

编辑#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

4 回答 4

28

你的第一个版本不工作的原因是因为执行标签内的插件配置和执行标签外的插件配置之间存在差异。仅当您的插件由完整 Maven 构建的特殊阶段触发时才使用执行。

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

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

于 2011-07-20T10:20:33.293 回答
20

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

<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 中选择规则。

于 2011-09-15T13:44:02.507 回答
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>
      ...
于 2015-09-16T11:01:03.480 回答
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>
于 2011-07-19T23:12:31.647 回答