【问题标题】:Jenkins / Maven Multi-Module with submodule build, fails the release build具有子模块构建的 Jenkins / Maven 多模块,发布构建失败
【发布时间】:2014-10-30 21:40:15
【问题描述】:

我有一个 Jenkins / Maven / Git 多模块项目,其中包含一个子模块(由承包商开发,没有什么可以改变它)。由于 Git 和子模块,我必须在我的 Linux 中克隆存储库,使用命令“git clone --recursive ssh://xxxxxxx.git”。

这意味着我必须勾选“高级子模块行为”和“递归更新子模块”的 Jenkins Git 插件选项,以便填充所有模块(否则子模块仍然为空)。

所以我或多或少有这种配置:

父目录 模块 1 pom.xml 模块 2 pom.xml ... 模块 n pom.xml 子模块 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-test 并且一切都死了。当我对 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 不要更新子模块而是更新所有其他模块?
谢谢,
凯文

【问题讨论】:

    标签: git maven jenkins maven-release-plugin


    【解决方案1】:

    父 POM 中的所有模块共享一个版本号。如果模块遵循不同的发布周期/不受您的控制,请不要将其设为模块。自行构建和发布它,并将其作为依赖项包含在内。

    不要试图绕过 Maven 的约定——这些工具不能很好地支持,你会遇到问题。

    【讨论】:

      【解决方案2】:

      试图“破解” maven 约定总是一个坏主意。 Maven 在这样做时真的会过敏。您对 Maven 的默认行为是否满意。如果您不是,请尝试编写自己的发布插件。标准版本插件默认增加所有版本。没有办法摆脱这种行为。

      在我看来,使用 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
      

      简单地扩展它等等......

      【讨论】:

        猜你喜欢
        • 2016-10-30
        • 1970-01-01
        • 2012-05-06
        • 2022-11-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-29
        • 2011-07-24
        • 2016-09-05
        相关资源
        最近更新 更多