23

Maven Enforcerプラグインを使用して、パスに重複するクラスがあるかどうかを確認したいと思います。

ここから例を試してみました。

しかし、私がこのように実行すると:

mvn enforcer:enforce

このエラーが発生します:

プロジェクトデータポピュレーターでゴールorg.apache.maven.plugins:maven-enforcer-plugin:1.0.1:enforce(default-cli)を実行できませんでした:ゴールorg.apache.maven.plugins:maven-enforcerのパラメーター'rules' -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 Docsを参照)。以下の例を参照してください。これは少なくとも3.1.1で機能し、引用された記事は2.2.0以降で機能するはずだと述べています

mvn enforcer:enforce

ただし、上記のMaven 3.1.1を使用している場合(3.3.3でエンフォーサー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 に答える