在我们的项目中,我们大约有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

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

1回复

maven依赖树 - 版本管理

在我的项目中,我在发出mvn dependency:tree -Dverbose时看到以下内容mvn dependency:tree -Dverbose : 这个version managed平均值Xalan 2.7.2会覆盖2.7.0吗? 注意:在我的父pom中,我在depend
1回复

适用于MDB和EAR的Maven项目结构

我有一个无头(即没有战争组件)业务对象,我希望将其作为EAR安装在我的应用服务器上。 我知道要执行此操作,我将需要创建一个maven项目来像平常一样生成此Message Driven Bean的jar,但是对于耳朵,我需要一个单独的maven项目来生成耳朵。 这是父项目还是正确的抽象?
4回复

用于Firefox的基于Java的Selenium WebDriver项目的Maven pom.xml示例

我想通过Selenium WebDriver项目使用Java自动化Firefox 。 因为在我不熟悉如何设置合适的Maven pom.xml文件来创建项目之前我从未使用过Selenium和Maven ,然后可以将其导入Eclipse。 在http://docs.seleniumhq.
1回复

eclipse下相同多模块maven项目的多个版本

我想在eclipse下处理同一个多模块maven项目的 两个不同版本 。 不幸的是,当您在eclipse下导入多模块maven项目时,您可以自己更改父模块项目名称,以防止冲突,但不能更改子模块项目名称 。 子模块作为根项目导入,以模块名称命名。 显然,在导入期间无法重命名它们。
1回复

Maven pom.xml问题(缺少项目生成错误“版本”)

所以我的pom.xml的顶部看起来像这样: 但是,在第一行我得到了错误: 项目生成错误:版本丢失 紧接着是带有artifactid , groupid和model version的相同短语。 我不知道如何解决该问题,我的一个朋友建议设置我所做的JAVA_HOME系统变
1回复

当我刚刚更新项目的pom版本时,如何防止Maven从存储库下载工件

我将Maven用作CI,并将JFrog Artifactory用作我自己的工件的存储库和缓存。 一切正常。 我正在使用Jenkins中的Artifactory插件来触发工件下载和上传。 我无法弄清楚如何处理以下用例。 我有一个多模块项目。 在我的Settings.xml中,我定义了一些快照,插件和发
1回复

Maven项目-如何读取添加为依赖项的项目的pom文件中定义的属性

我正在处理一个包含许多Maven项目的大型项目。 我们正在使用Maven 3.3.9。 我想使用在另一个项目的一个Maven项目中定义的属性,但是我无法访问该属性。 情况是:有一个名为“ product-packaging”的maven项目,其项目包含一个包含某些属性的pom文件。
3回复

什么是Maven上的POM?

我正在尝试遵循Maven入门手册,但收到此错误 什么是POM?我应该怎么做才能拥有此文件?
3回复

使用一个pom.xml为两个或多个项目安装Maven

我是Maven的新手。 我在同一个工作区中有三个不同的项目,并且我想在三个项目中仅使用一个pom.xml来安装Maven,以避免一次又一次手动执行,只需在Project 1中运行maven install并自动安装其他两个项目中的Maven。 我不知道是否有执行此任务的Maven插件
1回复

适用于不同环境的Maven存储库设置

我正在为我们的团队设置内部Maven回购源。 我不知道如何应对不同的环境。 我想要3种不同的提要,例如dev,ppe和prod。 如何设置pom.xml的参数,以便build / install命令可以基于某个参数与这三个提要之一进行通信? 例如 mvn clean dep