一意でないスナップショット(Maven 3でサポートされている唯一の種類のスナップショット)を使用したマルチモジュールビルドで、maven-enforcerルールが失敗するプロジェクトがあります。
たとえば、->が「依存」関係であると仮定します。
- モジュール-A->モジュール-B->モジュール-C
- モジュール-A->モジュール-C
モジュールBとモジュールCは、一意のビルドとしてスナップショットリポジトリに存在します。POMで宣言されているすべてのモジュールバージョンは、現在1.0-SNAPSHOTです。
ここで、モジュールAの構築は失敗します。
mvn -pl Module-A install
結果:
[INFO] --- maven-enforcer-plugin:1.0.1:enforce (enforce) @ Module-A ---
[ERROR]
Dependency convergence error for com.vivosys.project:Module-C:1.0-SNAPSHOT paths to dependency are:
+-com.vivosys.project:Module-A:1.0-SNAPSHOT
+-com.vivosys.project:Module-B:1.0-20111228.032527-8
+-com.vivosys.project:Module-C:1.0-SNAPSHOT
and
+-com.vivosys.project:Module-A:1.0-SNAPSHOT
+-com.vivosys.project:Module-C:1.0-20111228.032527-6
推移的な依存関係は非一意のスナップショットビルドとして解決されますが、直接の依存関係は一意のスナップショットビルドとして解決されます。
私はmaven3.0.3、maven-enforcer1.0.1を使用しています。リポジトリは、一意のスナップショットオプションを使用するArtifactory 2.4.2です(Maven 3は一意でないスナップショットをサポートしなくなったため、Artifactoryが推奨しています)。
ソリューション?
更新:アーティファクトにより、Mavenクライアントの動作をオーバーライドし、一意でないスナップショットをリポジトリに保存できるように見えます。ただし、何らかの理由でArtifactoryはこれを推奨していません( http://wiki.jfrog.org/confluence/display/RTF/Local+Repositoriesの「Maven3」の宣伝文句を参照)ので、他のソリューションは引き続き歓迎されます。