gpt4 book ai didi

java - 是否可以覆盖子 POM 中依赖项的版本?

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

我正在使用 Maven 来管理我的项目的依赖关系。我有我的父 POM,我正在使用依赖管理来避免在每个项目中编写公共(public)依赖项。

现在,我需要更改子 POM 中一个依赖项的版本。

我有我 parent 的 POM

<dependencyManagement>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.1</version>
</dependency>
</dependencyManagement>

我的子 POM 引用了父 POM

<parent>
<groupId>com.myproject</groupId>
<artifactId>root-parent-pom</artifactId>
<version>1.1.0.22</version>
<relativePath>../parent/pom.xml</relativePath>
</parent>

在这个子 POM 中,我想覆盖我在父 POM 中编写的相同依赖项的版本,如下所示。

<dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
</dependency>

我这样做了,但是当我生成我的项目时,在这种情况下是一个 WAR,我的项目中包含的依赖项的最终版本是父 POM 中描述的版本。

是否可以覆盖子 POM 中的版本?

最佳答案

也许吧。如果您指定不同的版本,则此版本将覆盖 dependencyManagement 元素中的版本。

但仅限于这个单一的 POM。它不会神奇地分发到 react 器构建中的下一个 POM,除非下一个 POM 将此 POM 作为父级。所以如果你有这个设置:

parent
- mod1
- mod2
- war

然后将其放入 mod1,然后 war 将不会注意到,因为 war 使用 parent 作为父 POM。依赖项 mod1 表示“请使用 2.6”,但这与使用 2.1 的任何其他 pom 相同 - 没有理由更喜欢它另一个。这就是 dependencyManagement 的强大之处:您可以在一个地方控制所有传递依赖项的版本。

尝试 mvn help:effective-pom 看看 Maven 将在构建的每个部分使用什么。

要让 WAR 选择覆盖的版本,您需要在 WAR 的父 POM 或 WAR 的 POM 本身中指定它。

通常的解决方案是为所有项目设置默认版本 (2.1) 的父 POM。然后每个项目都有一个继承自全局父 POM 的父 POM。这里可以设置版本为2.6。由于项目的所有模块都继承自它,因此每个项目的父 POM 优先。

关于java - 是否可以覆盖子 POM 中依赖项的版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25019211/

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