【发布时间】:2017-02-09 15:41:30
【问题描述】:
在我看来,maven 依赖插件在计算依赖列表时行为不端。
假设这 3 个项目:
base1:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>mygroup</groupId>
<artifactId>base1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.3</version>
</dependency>
</dependencies>
</project>
base2:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>mygroup</groupId>
<artifactId>base2</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
</project>
综合:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>mygroup</groupId>
<artifactId>combined</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>mygroup</groupId>
<artifactId>base1</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>mygroup</groupId>
<artifactId>base2</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
base1 和 base2 都依赖于 commons-lang,但每个版本都不同! 组合取决于 base1 和 base2。
在组合调用mvn dependency:list 时,我希望在 2.3 和 2.6 版本中看到 base1、base2 和 commons-lang,因为它们都被使用了。
然而实际输出是:
[INFO] The following files have been resolved:
[INFO] commons-lang:commons-lang:jar:2.3:compile
[INFO] mygroup:base1:jar:1.0-SNAPSHOT:compile
[INFO] mygroup:base2:jar:1.0-SNAPSHOT:compile
它甚至不使用版本号最高的通用语言,而只是使用它首先找到的那个。
我怎样才能避免这种情况?我需要所有依赖项。
【问题讨论】:
-
最适合您的是更改需要依赖 commons-lang:2.3 的代码。对不起...
-
@otonglet 如果 base1 和 base2 是第三方模块,我做不到。
-
@radlan 你是不是把
mvn dependency:list和mvn dependency:tree混淆了? -
@nullpointer 不,我更多地谈论用于计算依赖关系的实际算法。
mvn dependency:copy-dependencies是实际使用的。但是因为和mvn dependency:list一样,我提到了这个,因为它更容易举个例子。
标签: java maven dependencies maven-dependency-plugin