在我们的项目中,我们有大约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
答案 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-plugin
与set
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文件。