如何将父 POM 中的属性传播到子 POM post build

How to propagate properties in parent POM to child POM post build

有许多使用公共父 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 依赖项,因为我有几个子项目根本不 need/use log4j。此外,这并不能解决问题,因为即使这样,构建后的子项目也根本不会调出对 log4j 的依赖?可能比我现在的还要糟糕

此行为是预期的。

Sub-module 的 pom-files 未像已解析 属性 值的资源文件那样构建。他们总是指 parent-pom.

如果你添加一些 sub-module 的模块 A(包含 <parent> 定义)到项目依赖中,它将下载 parent-pom,就像传递依赖一样,并且将采取来自父 pom 的 属性 值。

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

属性 javax.activation.version 在父 pom

中定义

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