如何在生成后将父POM中的属性传播给子POM

  • 本文关键字:POM 属性 传播 java maven
  • 更新时间 :
  • 英文 :


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

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

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

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

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

这种行为是意料之中的。

子模块的pom文件不像解析了属性值的资源文件那样构建。他们总是提到父pom。

如果你在项目依赖项中添加一些模块A,它是一个子模块(包含<parent>定义(,它会下载父pom,就像传递依赖项一样,并从父pom中获取属性值。

看看maven central中发布的一些pom(FasterXMLJackson(,例如

父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

最新更新