【问题标题】:Maven 'versions' plugin not picking up properties from parentMaven 'versions' 插件没有从父级获取属性
【发布时间】:2010-09-03 01:31:55
【问题描述】:

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

  • 根:
    • 模块A
    • 模块B

'root' 是一个聚合器 POM,即声明 moduleA 和 moduleB 为子 modules,并且 A 和 B 都有 root 作为 parent

A 和 B 都依赖于 project-C,但是这个依赖的 version 是在 property 中定义的 - 比如@ 987654322@ - 未硬编码。该属性在 root 中定义,因此 A 和 B 都继承了 project-C 的相同版本值。

在根 POM 中:

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

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

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

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

$ cd /projects/root
$ mvn versions:display-property-updates -DallowSnapshots=true

但我得到的只是这样的:

[INFO] 构建根 [INFO] 此项目没有与版本关联的任何属性 [INFO] 建筑模块A [INFO] 此项目没有与版本关联的任何属性 [INFO] 建筑模块B [INFO] 此项目没有与版本关联的任何属性

如果我在 root、moduleA 或 moduleB 上运行它并没有什么不同:它总是这样说。当然,如果我在依赖项中硬编码项目 C 的版本号,它会起作用。

因此,总而言之:我想将依赖版本作为属性集中在根(聚合器/父)POM 中,并且我希望 versions 插件能够为在属性上工作的目标挑选那些,即:

  • 显示属性更新
  • 更新属性

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

【问题讨论】:

  • 作为提示,认为这个问题同时解决了。至少我不必用org.codehaus.mojo:versions-maven-plugin:2.8.1 跳过那些圈子。 (而且我确实必须在我的旧版本代码中这样做:-))
  • 感谢@tobi42。是的,已经 11 年了,很高兴知道他们修好了 :)

标签: maven-2


【解决方案1】:

您在MVERSIONS-123 收到的答案似乎不准确:

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

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

<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(如果您不想在任何地方继承它,这将起作用)。

【讨论】:

  • 谢谢,@Pascal。我怀疑这是插件中的错误,正如您简洁地说的那样:“但是在父级中声明属性而在子级中声明依赖项不会(即使在父级上运行插件时)。”我将敲出一个示例并将其添加到 MVERSIONS-123。我现在将切换到dependencyManagement 解决方案。
  • @Cornel 我同意。上传示例演示项目肯定会增加重新打开问题的机会。出了点问题。
  • 这有什么更新吗?问题的链接已损坏,我仍然遇到此问题。
【解决方案2】:

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

【讨论】:

  • 是的,我正在考虑,但它会比属性解决方案详细得多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2011-11-25
相关资源
最近更新 更多