Maven版本插件,限制版本:更新属性损坏

时间:2012-12-11 12:26:16

标签: java maven versions-maven-plugin

我有一个多模块maven项目,其中模块共享依赖项。通过共享我的意思是使用相同的依赖项。但是每个模块本身都声明了依赖关系。为了保持理智(是的,maven,理智,我知道),并使所有模块使用相同版本的依赖项,parent 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

(基本上我也运行:&#34; mvn版本:use-releases&#34;如果需要改变通常的依赖关系,但它超出了这个问题的范围。)

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

有没有办法限制更新属性的损害?版本:use-release需要包含属性,所以我只能在我的人工制品上使用它。找不到任何类似的update-properties。

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

1 个答案:

答案 0 :(得分:2)

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

<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>

重要的一步是不要定义版本。在这种情况下,将使用由依赖关系管理块定义的版本。因此,您不需要定义属性等。此外,您还可以在一个点上定义和更改特定版本的依赖项。

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