【问题标题】:Maven POM version management for multiple maven projects多个Maven项目的Maven POM版本管理
【发布时间】:2025-10-23 16:00:02
【问题描述】:

在我们的项目中,我们有大约 25 个 maven 项目,每个项目至少包含 3 个模块项目和一个父 POM。所以总共大约是 (25 *4) 100 个 POM 文件。有没有简单的方法来维护 POM 更改版本?所以这个任务变得乏味乏味的任务。这一定是整个软件开发的普遍问题?

是否有人有脚本或工具来执行此版本更改以处理以下 3 种情况?

1)  
    <dependency>
      <groupId>THEGROUPID</groupId>
      <artifactId>THEARTIFACT</artifactId>
      <version>THE-VERSION</version>
    </dependency>

2)
    <dependency>
      <groupId>THEGROUPID</groupId>
      <artifactId>THEARTIFACT</artifactId>
      <version>$(version.number)</version>
    </dependency>
3)
  <parent>
    <groupId>THEGROUPID</groupId>
    <artifactId>THEARTIFACT</artifactId>
    <version>THE-VERSION</version>
  </parent>

我们有 25 个 maven 项目,每个项目之间都相互依赖(通过父 pom 但不是循环依赖)。因此,当我们更改其中一个 lib 的版本时,它需要在所有 maven 模块父 POM 中进行更改.....因此,我一直在寻找可以在 POM 的流行中实现这一目标的工具,而不仅仅是一个多-module 项目(发布插件只会发布和ONE maven muti-module 项目。)希望这对问题有更好的理解..

基本上,我正在寻找 linux SED 类型的命令,但要寻找特定的 groupid 和 artifactid。

谢谢,

Bmis13

【问题讨论】:

    标签: maven pom.xml


    【解决方案1】:

    将所有版本放在父 pom 中的 &lt;dependencyManagement&gt; 中:

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>THEGROUPID</groupId>
          <artifactId>THEARTIFACT</artifactId>
          <version>THE-VERSION</version>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    在此,您无需将&lt;version&gt; 标签添加到您的子pom。

    参考:dependencyManagement(向下滚动)

    【讨论】:

      【解决方案2】:

      使用versions-maven-plugin 和它的set mojo:

      cd <your-super-parent-pom>
      mvn versions:set -DoldVersion=1-SNAPSHOT -DnewVersion=2-SNAPSHOT
      

      然而,这个插件有一些限制。它不能处理 pom 继承复杂的某些(复杂)结构,我也不确定它是否处理属性引用。

      maven-release-plugin 内部也有类似的功能。它可能有更高的机会更好地工作,因为它被更频繁地使用 - 而且 AFAIK 代码不共享 - 但我对此没有直接经验。我刚刚观察到 许多 版本在相当困难的情况下具有正确的版本重新编号...

      【讨论】:

        【解决方案3】:

        我编写了自己的工具来执行此操作。它被称为“鞍头”,您可以在这里找到它:

        http://code.google.com/p/pommel/

        您定义一个映射文件并从命令行运行它,即

        java -jar pommel-1.0.0.jar -iC:\Development\java\projects -mmapping.xml
        

        映射文件采用以下形式:

        <?xml version="1.0"?>
        <mappings>
          <mapping>
            <dependency-source>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>*</version>
            </dependency-source>
            <dependency-target>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.9</version>
                <scope>test</scope>
            </dependency-target>
          </mapping>
        
        </mappings>
        

        这会将所有对 junit 的引用替换为指定的依赖目标。不是你可以在依赖源定义中使用通配符。它会将映射应用于它在指定目录下找到的所有 pom 文件。

        【讨论】:

          最近更新 更多