在我们的项目中,我们大约有25个Maven项目,其中每个项目至少包含3个模块项目和1个父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,但没有循环依赖)。 因此,当我们更改一个库的版本时,需要在所有Maven模块父POM中进行更改.....因此,我一直在寻找能够在众多POM中实现这一目标的工具,而不仅仅是一个muti。 -module项目(发行插件将仅发行和一个maven muti-module项目。)我希望这将对问题有更好的了解。

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

谢谢,

Bmis13

===============>>#1 票数:5

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

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

因此,您不需要在子poms中添加<version>标记。

参考: dependencyManagement (向下滚动)

===============>>#2 票数: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 票数: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文件。

  ask by Bmis13 translate from so

未解决问题?本站智能推荐: