我对多模块项目中的属性有疑问。多模块项目中的Maven属性重置为默认值
考虑以下3级项目struture:
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
将该属性写入清单。
在module-pom中,我声明使用buildnumber-maven-plugin
以便实际执行。
这一切都可以直接构建模块,即仅执行module-pom。 清单包含由控制台中打印的buildnumber-maven-plugin
报告的修订。
但是,如果我执行超聚甲醛或组-POM的默认值修订被写入清单,虽然buildnumber-maven-plugin
被执行,并获取正确的版本(这之前打印到控制台运行maven-jar-plugin
)。
所以我有这种感觉,我在多模块项目中遗失了一些属性继承。
有没有人有一个想法这里有什么可能是错的?或者任何人都可以指出我对这些情况下的属性如何处理的描述(不幸的是,我还没有设法找到一个好的描述)?
更新
我做了一些研究和一些测试与调试输出(-X
选项),并从我迄今发现跑,我想我的问题是这样的:
1)在解析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
可言。
任何人都可以证实这一点吗?