このようにMavenは機能しません。
同じartifactIdとgroupIdを持つが、バージョンが異なる複数の依存関係の解決は、単一の依存関係になります(使用されたバージョンは決定論者ではありません)。
あなたがmvn clean package
を実行していない:
WARの同じlibフォルダ内の同じたartifactIdとのgroupIdが、2つの異なるバージョンの2つのアーティファクトの存在は、おそらく、これらのいずれかに関連していますただし、mvn package
のみです。
あなたはMaven warプラグインの盗んだバージョンを使用します。それを確認するために更新しようとしてください。
コンポーネントのビルド中にターゲットフォルダのWEB-INF/lib
フォルダにWicket jars 6.18.0をコピーするMavenプラグインがあります。
ビルドしているmaven WARプロジェクトは、WARタイプのアーティファクトとして依存しています。この場合、WAR依存関係の依存関係は、構築しているWARプロジェクトの中ではoverlaidです。なぜならWARの依存関係の
重複JARについての興味深いMavenの問題:
JARs with different versions can be in WEB-INF/lib with war as dependencies
Your answerとあなたのcommentは実際にあなたがあなたのビルドでWAR依存性を持っていることを示しています。
残念ながら、この制限を回避するための効果的で長期的な効果的なソリューションはありません。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<!-- ... -->
<packagingExcludes>WEB-INF/lib/wicket-*-6.18.0.jar</packagingExcludes>
</configuration>
</plugin>
しかし、それは時間を通して、あなたのビルドが少なく堅牢行います使用して、注意してください:
としては、Mavenの戦争プラグインのpackagingExcludes
プロパティは、実際の問題に有効な回避策です使用して、私のコメントで述べています。 WAR依存関係のバージョンを更新する日とその新しいバージョンでは、別のバージョンのwicketを再度取得しますが、ビルドされたWARでは2つの異なるバージョンのjarファイルが重複する危険性があります。
overlay
の要素を指定してthe overlayというフィーチャーを使用すると、一般にはwar依存関係に適用されるオーバーレイに焦点が当てられているため、maven-war-plugin
の要素が一般に優れています。問題を早期に解決します。 その結果、あなたはWARの依存関係から任意の改札JARファイルを除外するように定義できます
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<version>2.4</version>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<overlays>
<overlay>
<groupId>com.whatever.youlike</groupId>
<artifactId>myArtifact</artifactId>
<excludes>
<exclude>WEB-INF/lib/wicket-*.jar</exclude>
</excludes>
</overlay>
</overlays>
</configuration>
</plugin>
この方法が優れているが、これはまだ回避策です。
依存関係WARが更新され、実際のビルドで宣言された新しい依存関係(Wicket以外)を異なるバージョンで取得する日は、同じ種類の問題で終了することがあります。
WARアーティファクトへの依存関係を宣言することは、選択肢がないためにのみ行うべきだと思います。
ポムとプロジェクトのリファクタリングが可能なので、2つのWARが依存する共通のJAR依存性を導入し、2つのWARの共通のソースとリソースのみを含むと、実際の処理が簡単になります。
は、あなたのポンポンを投稿してくださいことはできますか? – BackSlash