仅在一个地方更新Maven模块的版本

时间:2016-09-10 22:21:58

标签: java eclipse maven multi-module

我有一个包含2个模块的Maven项目。我希望模块继承该项目的版本,而不将其定义为任何子模块的POM文件中的父项(其背后的原因是模块已经具有父项)。实现这一目标的最佳方式是什么?

从属性文件导入版本不起作用,因为maven期望一个常量值作为项目版本,而不是表达式。 Maven插件,例如版本maven插件或maven发布插件,不是我的问题的解决方案,因为我需要一些可以在IDE中工作的东西(我必须使用Eclipse来打包项目,而不是我的调用)。

修改

澄清事情(如果我的原帖不够清楚,请道歉)

主项目POM文件

...
<groupId>org.mygroup</groupId>
<artifactId>parentproject</artifactId>
<version>1.1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
    <module>module1</module>
    <module>module2</module>
</modules>
...

模块POM文件示例

...
<groupId>org.mygroup</groupId>
<artifactId>module1</artifactId>
<version>1.1.0-SNAPSHOT</version>
<packaging>war</packaging>
<parent>
 <!-- Some parent that's NOT the main project, e.g. Spring Boot -->
</parent>
...

我想要的是一个解决方案,允许我只设置版本ONCE(例如在主项目POM文件中)并让该项目的每个模块都继承&#34;继承&#34;那个版本。

2 个答案:

答案 0 :(得分:0)

我真的想不出任何适合100%必需品的Maven设施。如果您可以将parentproject设置为每个子模块上的实际父项,则需要在parent声明中指定其版本,因此......

但是我想到了通过authomatism完成工作的技巧,所以每次更改父版本时,它都会自动传播到每个子模块。可以这样做:

在父项目中编写一个插件,在每个模块的pom文件上写入版本ID(例如,通过带有xml-maven-plugin的XSL转换)。

然后,将此插件链接到package阶段,以便每次构建父项时,版本都会传播到子模块。

您只需要刷新 Eclipse中的子模块项目,以使Eclipse了解这些更改。

但如果您不想手动刷新,还有另一种选择 - 完全基于Eclipse:

制作Ant脚本以执行copy-version-to-all-module-poms任务。并且,不是从Maven阶段调用它,而是编程Eclipse builder来调用它,并且在此构建器中,还编程特定模块的刷新。因此,每次执行项目的构建时,它都会将其版本复制到子模块,并使Eclipse了解此更改。

答案 1 :(得分:0)

您应该将父级设置回实际的父项目。可以使用mvn versions:set同时更新模块之间的版本号。如果需要跨模块依赖关系的版本号,请使用${project.version}。如果要为其依赖项嵌入另一个Maven配置文件,请考虑使用物料清单(BOM):https://stackoverflow.com/a/14876651。希望事情能带给你答案!