仅在maven项目中安装更改的模块,并仅更新已更改的模块的版本号

时间:2016-08-09 08:12:16

标签: maven versioning multi-module

首先抱歉长标题。我正在研究一个多模块的maven项目。现在,项目只有1个版本,即父版本。此外,由于所有模块都是逐个安装的,因此进行“mvn install”需要很长时间。我的目的是只安装更改的模块和依赖它的模块。然后我想更改模块的版本 - 这是父pom中的属性 - 已更改。

到目前为止,我通过以下命令获取更改文件(我的目的是通过命令行获取提交ID,而不是相对于HEAD获取diff,但出于开发目的,HEAD很好):

git diff HEAD | grep '^diff --git [A-Za-z0-9 ]*' | cut -d ' ' -f 3 | cut -c 3-  

获取已更改文件的相对路径(根据项目的父目录)。有了这些信息,我检测到更改的模块,在父pom.xml文件中更改它们的版本(它们被设置为父pom中的属性)

作为旁注,我正在通过python bash脚本完成所有这些。

我想通过命令安装更改的结节:

mvn -pl module1,module2.. -amd install

我现在无法解决的是,对于某些模块,-pl命令不起作用,因为我收到以下错误:

Failed to execute goal on project bla-bla: Could not resolve dependencies for project com.xyz.bla:bla-bla:jar:2.10.0:

当我在启用调试日志记录的情况下执行上述命令时,我意识到问题可能就是没有评估父pom因此无法理解:

com.xyz.bla:bla-some_other_bla:${bla-someother-bla-version}

意味着它无法解析子pom上的版本属性,因此无法在本地存储库中找到jar并且无法完成安装。

我想知道这种方式是否是实现我想要实现的目标以及如何解决此依赖性问题的好方法。如果你们两个都知道,那么请说明两者,因为我只有有限的时间来完成工作,我可以用当前的解决方案来推测:)

注意:

一切顺利。

1 个答案:

答案 0 :(得分:0)

多模块构建的想法是所有模块只有一个版本号,因为所有模块将同时发布。

您可以改进它,只构建那些可以通过this实现的已更改的模块。还有this might help,特别是可以用作版本号的属性。