私はこれに似た依存構造を持っています:
A:compile
com.jolbox:bonecp:jar:0.7.1.RELEASE:compile
com.google.guava:guava:jar:r06:compile
com.google.guava:guava:jar:13.0:compile
つまり、私のプロジェクトは、Guava 13.0 と BoneCP (Guava r06 に依存) に依存する A に依存しています。
実行すると、次のようmvn clean dependency:tree | grep guava
に表示されます。
[INFO] | | \- com.google.guava:guava:jar:13.0:compile
Mavenの依存関係の解決を理解している限り、これは起こるはずのことです。
ただし、mvn clean package
結果のjarを実行して解凍すると、Guava r06が含まれているようです。A では、r06 ではなく Guava 13.0 にある機能に依存しているため、ランタイム エラーが発生します ( java.lang.NoClassDefFoundError: com/google/common/collect/Table
)。
シェード プラグイン (1.4) を使用して、すべての依存関係を含む jar を作成しています。mvn --version
これが(この問題が発生しているビルドサーバーでの)結果です。
Apache Maven 3.0.4 (r1232337; 2012-01-17 08:44:56+0000)
Maven home: /opt/apache/apache-maven-3.0.4
Java version: 1.6.0_26, vendor: Sun Microsystems Inc.
Java home: /usr/lib/jvm/java-6-sun-1.6.0.26/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "2.6.32-5-amd64", arch: "amd64", family: "unix"
別のマシン (私のローカル ワークステーション) では、パッケージ化された jar に、予想どおり Guava 13.0 が含まれています。そのマシンのバージョン情報は次のとおりです。
/usr/java/default
Apache Maven 2.2.1 (rNON-CANONICAL_2011-06-28_14-50_mockbuild; 2011-06-28 10:50:25-0400)
Java version: 1.6.0_27
Java home: /usr/java/jdk1.6.0_27/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux" version: "2.6.43.8-1.fc15.x86_64" arch: "amd64" Family: "unix"
Maven 2.2.1 から 3.0.4 への変更により、依存関係解決戦略が変更されましたか? ここで何が起こっているのですか?