2011-12-11 73 views
1

在我们的项目中,我们有大约25个Maven项目,每个项目至少包含3个模块项目和一个父POM。总共是(25 * 4)100个POM文件。有没有简单的方法来维护POM更改版本?所以这个任务变成单调乏味的任务。这在整个软件开发过程中一定是常见的问题?Maven多个Maven项目的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

回答

4

放入<dependencyManagement>所有版本在你的父POM:

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

在此,你不需要到<version>标记添加到您的孩子劲歌。

编号:dependencyManagement(向下滚动)

+0

大家好, 谢谢, – Bmis13

0

我写我自己的工具来做到这一点。这就是所谓的“鞍马”,你可以在这里:

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

1

使用versions-maven-pluginset魔力:

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

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

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