0

我有一个类似这样的依赖结构:

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

也就是我的项目依赖A,它依赖于Guava 13.0和BoneCP(依赖于Guava r06)。

当我跑步时,mvn clean dependency:tree | grep guava我看到:

[INFO] |  |  \- com.google.guava:guava:jar:13.0:compile

据我了解,Maven 的依赖解决方案是应该发生的。

但是,当我运行mvn clean package并解压生成的 jar 时,似乎 Guava r06 已包含在内。在 A 中,我依赖的是 Guava 13.0 中的功能,但不是 r06,所以我遇到了运行时故障(java.lang.NoClassDefFoundError: com/google/common/collect/Table)。

我正在使用 shade 插件(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 的变化是否改变了依赖解析策略?这里发生了什么?

4

0 回答 0