Maven包的版本与依赖版本不同:树显示

时间:2012-08-22 21:26:56

标签: maven maven-2 maven-3 maven-shade-plugin

我有一个类似于此的依赖结构:

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的更改是否更改了依赖关系解析策略?这是怎么回事?

0 个答案:

没有答案