多个maven项目的Maven POM版本管理

时间:2011-12-11 17:38:50

标签: maven pom.xml

在我们的项目中,我们有大约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的风靡中实现这一目标的工具而不仅仅是一个muti -module项目(发布插件只会发布和一个maven多模块项目。)我希望这会更好地理解这个问题。

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

谢谢,

Bmis13

3 个答案:

答案 0 :(得分:4)

将所有版本放入父pom中的<dependencyManagement>

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

因此,您无需将<version>标记添加到您的子poms中。

参考:dependencyManagement(向下滚动)

答案 1 :(得分:1)

versions-maven-pluginset mojo:

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

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

maven-release-plugin内部有类似的功能。它可能有更高的机会更好地工作,因为它被更频繁地使用 - 而AFAIK代码不被共享 - 但我没有直接经验。我刚刚在非常困难的场景中观察了许多版本的正确版本重新编号......

答案 2 :(得分:0)

我编写了自己的工具来做到这一点。它被称为'pommel',你可以在这里得到它:

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文件。