我有一个多模块项目。
父项目不包含任何代码,仅设置公共属性定义,项目版本号等。并指定模块和构建顺序。
我希望每个子模块都有一个
<parent>
<relpath>../pom.xml</relpath>
</parent>
因此,每个模块都继承组,版本和通用属性,例如java编译器版本等。
但这似乎不是有效的行家。我必须指定父组,工件和版本。 (而不是工件ID)。
当我修改项目的版本时,我必须进入每个子模块来修改父版本。
我宁愿不必跟踪子模块A的X版本与子模块B的Y版本兼容...我希望所有子模块(A..Z)都有一个与项目匹配的新版本(父版本) )
这可能吗?
答案 0 :(得分:1)
是的,可以,但是您需要使用第三方插件,即Mojo/Codehaus的Versions插件。您无需安装或进行任何特殊操作即可使用它,但它不是核心插件的一部分。
假设您的布局如下:
根POM:
<project>
<groupId>org.example</groupId>
<artifactId>root-pom</artifactId>
<version>1.0.0-SNAPSHOT</version>
<modules>
<module>child-1</module>
...
</modules>
...
</project>
子POM,直接位于根POM的子目录中,并且具有内部依赖性:
<project>
<parent>
<groupId>org.example</groupId>
<artifactId>root-pom</artifactId>
<version>1.0.0-SNAPSHOT</version> <!-- Hard-coded -->
<relativePath>..</relativePath>
</parent>
<artifactId>child-1</artifactId>
...
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>child-2</artifactId>
<version>${project.version}</version> <!-- Dependency to another module in the reactor -->
</dependency>
</project>
现在,如果您有很多子模块,则可以使用以下命令保持反应堆的一致性:
mvn versions:set versions:commit -DnewVersion=1.1.0-SNAPSHOT
这会将您的所有POM转换为版本1.1.0-SNAPSHOT
(或您选择的任何版本),以便子pom中的父版本与根POM相同。巧合的是,这与mvn release:prepare
期间发布插件所采用的方法相同。