【发布时间】:2018-09-08 12:34:56
【问题描述】:
我有一个多模块项目,在根 POM 中我有:
<modules>
<module>shared-lib1</module>
<module>shared-lib2</module>
<module>main-app</module>
</modules>
在main-app 模块中,我列出了这样的库:
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>lib1</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>lib2</artifactId>
<version>${project.version}</version>
</dependency>
一般的构建命令是mvn deploy -pl <changedList> -am -amd
当我的 Jenkins 自动化检测到推送到分支的更改时,它会分析从哪个模块更改了哪些文件。因此,例如只有 shared-lib1 被更改。
在这种情况下,命令将是mvn deploy -pl shared-lib1 -am -amd,由于-amd 选项,这会将main-app 放入要构建的项目的反应堆列表中。
但是,它不会拾取shared-lib2 并且main-app 将无法构建。
是否有任何选项可以正确构建树,所以基本上为-amd发现的所有模块启用-am选项?
UPD:${project.version} 每次都会更新,因为它包含提交的 SHA
【问题讨论】:
-
this answer 向您展示了如何进行多模块项目,我怀疑您的子项目中有组或版本,或者不是父项。
-
所有模块都设置了artifactId,模块版本匹配父版本,它们的父设置为根项目?还有什么要检查的吗?
-
不要把version和group放在children里面,看例子。
标签: java maven build multi-module