gpt4 book ai didi

java - Maven 版本插件,限制版本 :update-properties damage

转载 作者:行者123 更新时间:2023-11-30 09:28:51 28 4
gpt4 key购买 nike

我有一个多模块 Maven 项目,其中模块共享依赖项。通过共享,我的意思是使用相同的依赖项。然而,每个模块都声明了自己的依赖关系。为了保持理智(是的,maven,理智,我知道),并让所有模块使用相同版本的依赖项,父 pom 声明带有版本号的属性:

<properties>
<dependency1.version>1.0-SNAPSHOT</dependency1.version>
<dependency2.version>1.1-SNAPSHOT</dependency2.version>
</properties>

所有模块都使用它:

<dependency>
<groupId>group</groupId>
<artifactId>dependency1</artifactId>
<version>${dependency1.version}</version>
</dependency>

我对这个设置非常满意,因为它允许我在一处更改依赖项版本。

现在我有一堆我自己维护的依赖项。发布这些是自动的并且非常简单,基本上:

mvn release:prepare release:perform -B

现在我想在我运行的主项目中进一步自动化:

mvn versions:update-properties

(基本上我还运行:“mvn versions:use-releases”以根据需要更改通常的依赖项,但这超出了这个问题的范围)。

在此更新属性运行后,我的主要项目 pom 中的属性指向发布(这很好)。但是,如果我的模块使用属性来定义其他依赖项的版本,并且这些项目有可用的更新版本,那么这些属性也会发生变化。

有什么方法可以限制更新属性造成的损害吗? versions:use-release 采用 includes 属性,所以我只能在我的人工制品上使用它。找不到任何类似的更新属性。

我可以还原除父级之外的所有 poms 并仅提交/推送它,但它看起来并不优雅。

最佳答案

看来你没有理解maven的概念。在这种情况下,您应该使用 dependencyManagement在父 pom 中,如下所示:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>3.0</version>
</dependency>
...
</dependencies>
</dependencyManagement>

在您的模块中,您只需使用这样的依赖项:

  <dependencies>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
</dependency>
...
</dependencies>

重要的一步是不要定义版本。在这种情况下,将使用由依赖管理 block 定义的版本。因此,您不需要定义属性等,而且您可以在一个点上定义和更改依赖项,尤其是版本。

除此之外,还可以在 version:update-properties 的命令行上限制将要更改的属性。打电话。

关于java - Maven 版本插件,限制版本 :update-properties damage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13820416/

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