Mavenエンフォーサープラグインを使用して、パスに重複するクラスがあるかどうかを確認したいと思います。 here の例を試しました。
しかし、次のように実行すると、
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がないか無効です
これを正しく使用する方法はありますか?
EDIT#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>
同じエラーが発生します。
最初のバージョンが機能しなかった理由は、実行タグ内のプラグイン構成と実行タグ外のプラグイン構成に違いがあるためです。実行は、プラグインが完全なMavenビルドの特別なフェーズによってトリガーされた場合にのみ使用されます。
Maven設定ガイド はそれをよりよく説明しています:
タグ内の構成は、直接のコマンドライン呼び出しから使用できないという点で、外部の構成とは異なります。代わりに、それらがバインドされているライフサイクルフェーズが呼び出されたときにのみ適用されます。または、構成セクションを実行セクションの外に移動すると、プラグインのすべての呼び出しにグローバルに適用されます。
これを試して、構成を実行の外に移動します。これにより、ライフサイクルフェーズに拘束されなくなります。
<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からルールを選択します。
これらを見る answers
特別なデフォルトのコマンドライン実行ID、default-cliを使用して呼び出すことができます( Maven Docs を参照)。以下の例を参照してください。これは少なくとも3.1.1で動作し、引用された記事は2.2.0以降で動作するはずであると述べています
mvn enforcer:enforce
ただし、aboveを使用している場合、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>
...
実行中の構成で機能しない理由はわかりませんが、これは私にとってはうまくいきました:
<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>