2011-08-04 44 views
1

我的Maven项目是多模块的,通常版本号不会同步。例如,我可以拥有一个版本为1.2.3-SNAPSHOT的主POM和一个版本为3.4.5-SNAPSHOT的子模块(不保持同步的主要原因是模块通常从一个项目移动到另一个,必须保持其版本)。Maven:从子模块中检索主模块版本

现在我想把主项目版本放在包含main(或webapp等)的模块的资源中,当然这是一个子模块。这意味着我需要从一个子模块访问主POM版本。

另外请注意,我的项目有3或4个级别;因此,主POM是子模块的祖父,而不仅仅是父母。

尽管有一些Maven的经验,包括先进的东西,迄今为止,我一直无法解决这个问题。

谢谢。

+0

太明显的答案是让大师级POM将大师级版本放在由子子模块读取的属性中。我错过了什么? –

+0

...子模块从大师级继承的事实。它们继承了属性的定义而不是值,因此它们用本身的版本在本地重新评估$ {project.version}。 –

+0

啊,也许这是有效的。我试图建议的是定义一个属性,称为“grand-master.version”,其中的_literal_版本_redundantly_在特级大师中。没有本地碰撞。 –

回答

4

它应该与${project.parent.version}一起使用。

+2

你的直接建议不适合我,因为我有三个和四个级别的儿童POM。但是你让我重新阅读手册,实际上'$ {project.parent}'指的是包含父项的整个包的属性。换句话说,'$ {project.parent.parent.version}'适用于三个级别。我更喜欢独立于层数的东西,但这种方法现在是好的。可能使用Groovy Maven插件或类似的插件,可以编写一个小脚本,通过Maven属性导航到根模块。 –