如何解析使用动态版本的依赖项的父 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 子项目 - 不可解析的父 POM

Maven:在不扩展依赖项的情况下使用 flatten 解析版本

Eclipse 中不可解析的父 POM

gradle 到 maven 的转换,在依赖项的依赖项的版本名称中解析通配符“+”?

项目构建错误:不可解析的父 POM