我对多模块项目中的属性有疑问。
考虑以下 3 级项目结构:
project
+- pom.xml (packaging: pom) //referred to as super-pom
+- module_group
+- pom.xml (packaging: pom) //referred to as group-pom
+- module
+-pom.xml (packaging: jar) //referred to as module-pom
在超级 pom 中,我定义了一个属性版本,它获取默认值“未知”。
此外,我声明并使用buildnumber-maven-plugin
配置来获取 svn 修订版并将其放入属性修订版中。
接下来我配置将maven-jar-plugin
属性写入清单。
在 th module-pom 中,我声明了buildnumber-maven-plugin
实际执行的 so 的用法。
这一切都在直接构建模块时起作用,即仅执行模块-pom。清单包含由buildnumber-maven-plugin
控制台打印的 as 报告的修订。
但是,如果我执行 super-pom 或 group-pom,则修订的默认值将写入清单,尽管buildnumber-maven-plugin
执行并检索正确的修订(它在运行之前 将其打印到控制台maven-jar-plugin
)。
所以我觉得我在多模块项目的属性继承方面遗漏了一些东西。
有谁知道这里可能出了什么问题?或者谁能指出我在这些情况下如何实际处理属性的描述(不幸的是我还没有找到一个好的描述)?
更新
我做了一些研究并使用调试输出(选项)进行了一些测试运行,-X
从到目前为止我发现的情况来看,我认为我的问题如下:
1) 在 pom 解析期间,pom 中使用的属性被替换为它们的值。
考虑这个部分pom:
<!-- declare the property default value -->
<properties>
<revision>default</revision>
</properties>
...
<!-- use the property -->
<someconfig>${revision}</someconfig>
在对 pom 进行评估后,它似乎会导致与此相对应的状态:
<properties>
<revision>default</revision>
</properties>
...
<!-- The property seems to be "statically" replaced -->
<someconfig>default</someconfig>
2) 设置实际属性值的插件会在之后运行,即使在validate
阶段期间也是如此。
因此,属性本身已正确设置为新值,但不再读取。
3)使用的插件<someconfig>
(在我的情况下是maven-jar-plugin
)现在运行,<someconfig>default</someconfig>
因此它根本不读取revision
。
谁能证实这一点?