如何解析使用动态版本的依赖项的父 POM
Posted
技术标签:
【中文标题】如何解析使用动态版本的依赖项的父 POM【英文标题】:How to resolve the parent POM of a dependency that uses the dynamic version 【发布时间】:2012-09-17 00:02:33 【问题描述】:我正在构建一个多模块项目。项目结构如下:
-Build
-Local
-POM.xml (Master)
-Main Project
-Module A
-Libs Project
-Libs Project A
Libs 项目 A 的 POM 具有来自其父 POM 的动态版本
<parent>
<groupId>com.myproject</groupId>
<artifactId>libs</artifactId>
<version>$release.version</version>
</parent>
<!-- this POM -->
<groupId>com.myproject.libs</groupId>
<artifactId>http</artifactId>
<packaging>bundle</packaging>
<version>1.0.0</version>
当我运行 maven build 并传递 version 参数来构建“模块 A”时,maven 找不到 libs 项目的 POM。
原因:找不到父项目:com.myproject:libs 项目: com.myproject.libs:http:bundle:1.0.0 用于项目 com.myproject.libs:http:bundle:1.0.0
【问题讨论】:
【参考方案1】:现在停止
在 POM 中有许多 XPath 位置,属性替换永远不会以任何可用的方式工作。
/project/parent/groupId
/project/parent/artifactId
/project/parent/version
/project/groupId
/project/artifactId
/project/version
/project/packaging
这样做的原因是反应堆构建必须是确定性的。
当您尝试在这些位置使用属性时,它会似乎可以工作,换句话说,Maven 不会立即让您措手不及....但是当您尝试在 Maven 上做任何进一步的事情时会好心地把你的脚踢掉。
也许我们应该改变 Maven,让你一开始就大吃一惊……也许这会阻止人们认为在这些元素中添加属性扩展是受支持的。
【讨论】:
以上是关于如何解析使用动态版本的依赖项的父 POM的主要内容,如果未能解决你的问题,请参考以下文章
Maven 与 Jenkins - 更新依赖项的父 pom 版本
Maven:在不扩展依赖项的情况下使用 flatten 解析版本