我有一个Jenkins / Maven / Git多模块项目,其中包含一个子模块(由承包商开发,没有任何东西可以改变它)。由于Git和子模块,我必须在我的Linux中克隆repo,使用命令" git clone --recursive ssh://xxxxxxx.git"。
这意味着我必须检查“高级子模块行为”的Jenkins Git插件选项'和'递归更新子模块'以便填充所有模块(否则子模块保持为空)。
所以我或多或少都有这种配置:
ParentDir Module 1 pom.xml Module 2 pom.xml ... Module n pom.xml Submodule pom.xml pom.xml
Jenkins的所有东西都在正常建筑中构建得很好(' mvn clean install')。只有在尝试构建发布版本时才会出现问题
子模块设置为特定版本 - 3.3.3-SNAPSHOT并且无法更改。依赖于此子模块的其他模块的依赖关系设置为版本3.3.3-SNAPSHOT。不幸的是,当命令:
mvn release:prepare -DreleaseVersion = 0.1.2-test -DdevelopmentVersion = 1.0.1-SNAPSHOT
Jenkins修改项目 中每个模块中的所有pom文件,包括子模块 。那时,当maven尝试构建时,没有子模块版本0.1.2测试,一切都会死掉。当我对Jenkins离开的文件与我们的存储库中的内容进行差异时,我看到:
>/opt/tools/bin/git diff pom.xml | cat
diff --git a/pom.xml b/pom.xml
index 5e4cc3c..2ac2db6 100644
--- a/pom.xml
+++ b/pom.xml
<artifactId>workingLib</artifactId>
- <version>3.3.3-SNAPSHOT</version>
+ <version>0.1.2-test</version>
<packaging>pom</packaging>
有没有办法告诉Jenkins / Maven不要更新子模块但更新所有其他模块?
谢谢,
凯文
答案 0 :(得分:0)
父POM内的所有模块共享一个版本号。如果模块遵循不同的发布周期/不在您的控制之下,请不要将其作为模块。单独构建和发布它并将其作为依赖项包含在内。
不要试图解决Maven的惯例 - 这些工具不会很好地支持你,你会遇到问题。
答案 1 :(得分:0)
试图&#34; hack&#34; maven惯例总是一个坏主意。这样做时,Maven真的会过敏。您是否对mavens默认行为感到满意。如果你不是,那么尝试编写自己的发布插件。标准版本插件默认增加所有版本。没有办法摆脱这种行为。
在我看来,使用maven发布的默认方式并不是很好。特别是在多模块项目中,它是一团糟。我自己编写了一个shell脚本,只需执行以下步骤:
mvn versions:set
mvn clean install
git add
git commit
git tag
mvn deploy
mvn versions:set # now to next snapshot
git add
git commit
git push
简单地扩展它等等......