【问题标题】:How to propagate properties in parent POM to child POM post build如何在构建后将父 POM 中的属性传播到子 POM
【发布时间】:2022-02-01 00:08:06
【问题描述】:

有许多使用公共父 POM 的共享库 (jar)。

父 POM 的属性 log4j.version 定义为 2.17.1

子项目 A 和 B 具有使用版本 ${log4j.version} 定义的 log4j 依赖项

mvn clean install 工作正常。但是当我查看为项目 A 或 B 生成的工件时,他们的 POM 仍然在依赖项部分将 log4j 版本显示为 ${log4j.version}。如果其他项目开始使用库 A 或 B,这不会产生使用 2.17.1 版的预期效果。有什么方法可以将版本定义保留在父级中,但让子项目在构建的工件中指定版本?

而且我不想在父 POM 中添加 log4j 依赖项,因为我有几个根本不需要/使用 log4j 的子项目。另外,这并不能解决问题,因为即使这样,构建后的子项目也根本不会调用 log4j 的依赖关系?可能比我现在的情况更糟

【问题讨论】:

  • 为什么会出现这个问题?没有父级,子级工件的 pom 是不完整的,任何使用子级工件的人最终都会下载父级以获取这些版本,等等。如果您想要实际数字,请将它们硬编码并使用dependabot 之类的工具来保持更新。

标签: java maven


【解决方案1】:

这种行为是意料之中的。

子模块的 pom 文件不像资源文件那样构建,属性值已解析。它们总是指父 pom。

如果你将某个模块 A 作为子模块(包含 <parent> 定义)添加到项目依赖项中,它将下载 parent-pom,就像传递依赖项一样,并将从父 pom 中获取属性值。

查看一些在 maven central (FasterXML Jackson) 中发布的 pom,例如

在父 pom 中定义的属性javax.activation.version

https://repo1.maven.org/maven2/com/fasterxml/jackson/jackson-bom/2.13.1/jackson-bom-2.13.1.pom

并在子 pom 中引用

https://repo1.maven.org/maven2/com/fasterxml/jackson/jackson-base/2.13.1/jackson-base-2.13.1.pom

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2012-03-31
    • 2016-12-17
    • 2010-09-20
    • 2018-10-11
    • 2020-06-29
    • 1970-01-01
    相关资源
    最近更新 更多