Maven'版本'插件没有从父级获取属性

时间:2010-09-02 15:09:43

标签: maven-2

我不知道我是否遗漏了某些内容,但我对Maven的Codehaus versions plugin有疑问。这是我的情况的简化:

  • 根:
    • moduleA
    • moduleB

'root'是聚合器POM,即将moduleA和moduleB声明为子模块,A和B都将root作为 parent

A和B都依赖于 project-C ,但此依赖关系的版本是在属性中定义的 - 说{ {1}} - 没有硬编码。此属性在 root 中定义,因此A和B都继承了project-C的相同版本值。

在根POM中:

<project-C.version>

在模块A和B中(记住 root 是父级):

<properties>
    <project-C.version>1.0</project-C.version>

现在,说项目C的更新版本1.1-SNAPSHOT可用。我想使用版本插件向我展示,所以我运行:

<dependency>
    <groupId>com.blah</groupId>
    <artifactId>project-C</artifactId>
    <version>${project-C.version}</version>
</dependency>

但我得到的是这样的:

[INFO] Building root  
[INFO] This project does not have any properties associated with versions

[INFO] Building moduleA  
[INFO] This project does not have any properties associated with versions

[INFO] Building moduleB  
[INFO] This project does not have any properties associated with versions

如果我在root,moduleA或moduleB上运行它并没有什么区别:它总是这么说。当然,如果我在依赖项中硬编码project-C的版本号,它就可以工作。

所以,总结一下:我想将依赖版本集中在根(聚合器/父)POM中的属性,我希望版本插件为那些处理属性的目标选择那些,即:

  • display-property-updates
  • 更新的属性

我该怎么做?我错过了什么吗?这是版本插件中的错误吗?

2 个答案:

答案 0 :(得分:2)

这似乎是你的root pom中依赖管理部分的工作......

答案 1 :(得分:2)

您在MVERSIONS-123中收到的答案看起来不准确:

  

如果在父pom中定义属性,则从父pom运行目标(如果需要,包括子项目作为聚合器的一部分,以便获取依赖项)

这部分不是真的,或者至少不会发生。似乎版本插件只显示当前pom中的属性或属性。在父代中声明以下内容确实有效:

<properties>
    <project-C.version>1.0</project-C.version>
</properties>

<dependencies>
  <dependency>
    <groupId>com.blah</groupId>
    <artifactId>project-C</artifactId>
    <version>${project-C.version}</version>
  </dependency>
</dependencies>

但是声明父级中的属性和子级中的依赖项不会(即使在父级上运行插件时)。

现在,如果Stephen在MVERSIONS-123中描述的行为是预期的行为,那么就有一个错误(你应该提供一个允许重现的简单项目,我做了一个简单的测试,将Junit作为依赖)

但是在你的情况下(可能只是一个例子)因为A和B都依赖于C,为什么不把C放在父母身上呢?这会奏效。无论如何你应该使用dependencyManagement(如果你不想在任何地方继承它,这将有效。)