gpt4 book ai didi

java - 当子项目之间存在冲突时,为什么 maven 使用旧版本?

转载 作者:行者123 更新时间:2023-11-29 04:19:43 25 4
gpt4 key购买 nike

在有一个子模块 testA 依赖于 vaadin-client-compiler 依赖于 commons-lang3 version 3.1,它还依赖于另一个子模块 testB这取决于 commons-lang3 版本 3.4。

我希望 testA 使用 3.4 版本,因为 testB 依赖它,但它使用 3.1 版本。我可以通过将 [] 添加到 testB 项目中的版本来解决它,但为什么会这样呢?为什么maven没有被强制解析出正确的版本?

MCVE:

家长:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>test</name>
<packaging>pom</packaging>
<modules>
<module>testB</module>
<module>testA</module>
</modules>
</project>

依赖的 child

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<version>7.6.8</version>
<artifactId>vaadin-client-compiler</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>testB</groupId>
<artifactId>testB</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
<groupId>testA</groupId>
<artifactId>testA</artifactId>
</project>

和受抚养的 child

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>testB</groupId>
<artifactId>testB</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.4</version>
</dependency>
</dependencies>
</project>

最佳答案

根据 Maven Documentation :

[Maven] will use the version of the closest dependency to your project in the tree of dependencies.

if two dependency versions are at the same depth in the dependency tree, until Maven 2.0.8 it was not defined which one would win, but since Maven 2.0.9 it's the order in the declaration that counts: the first declaration wins.

所以你的问题的答案是 - 因为你在 testB 依赖和 commons-lang3< 依赖之前定义了 vaadin-client-compiler 依赖testA 中的树的深度相同。

如果你在 testA 中颠倒依赖项的顺序,你会看到它现在拉取了 3.4 版本的 commons-lang3(假设你使用的是一个版本2.0.9 或更新版本的 Maven)

关于java - 当子项目之间存在冲突时,为什么 maven 使用旧版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50125465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com