Maven2继承

kuk*_*das 17 maven-2

如果我有父pom并希望将其继承到多个项目.我通常在项目的顶部添加<parent> ... </parent>.我不喜欢这种方法的是,如果我父母的某些内容发生了变化,我必须编辑该父项继承的所有项目以修改版本号.有更好的方法吗?我希望我能解释的是可以理解的.

提前致谢.

Tim*_*Tim 17

我不喜欢这种方法的是,如果我的父母发生了某些变化,我必须编辑该父项继承的所有项目以修改版本号.有更好的方法吗?

就在这里!看一下Maven Versions Plugin,具体来说:

versions:update-child-modules更新项目子模块的父节点,以使版本与当前项目的版本匹配.
例如,如果您有一个聚合器pom,它也是它聚合的项目的父级,并且子级和父级版本不同步,则此mojo可以帮助修复子模块的版本.
(注意,如果您的项目因为版本不匹配而无法构建,那么您可能需要使用-N选项调用Maven以运行此目标.


编辑:当然,使用Maven3,您现在可以在子模块中拥有<version> -less <parent>元素:

在多模块或多pom项目中工作的开发人员不必在Maven 3中的每个子模块中指定父版本.相反,您可以添加无版本的父元素.

参考


Esk*_*ola 8

您可以在发布时使用Maven Release Plugin.它将自动更新所有版本号并在源代码管理中创建一个标记(如果您在POM中配置了SCM).

我执行发布的命令通常如下,之后我从SCM导出标记并使用"mvn clean package"或"mvn clean deploy"构建它.

  svn update   (or whatever SCM you use)
  mvn clean
  mvn release:prepare -DautoVersionSubmodules=true
  mvn release:clean
Run Code Online (Sandbox Code Playgroud)

因此,例如,如果您的版本是第一个"1.0-SNAPSHOT",则发布插件将创建标签"projectname-1.0",版本为"1.0",最后将当前版本增加到"1.1-SNAPSHOT".该插件将询问您的版本和标记名称,因此您可以覆盖默认值.


Mat*_*ugh 6

自动父版本化(即省略标签)是Maven空间中一个有争议的问题. 记录了一个缺陷.目前,它被认为是2.1版本分支的修复或改进,


kro*_*old 2

我认为要认识到的重要一点是,在多模块构建中,maven始终使用来自本地存储库的版本。这也适用于多模块构建!因此,当您引用“父”pom 时,您将从本地 Maven 存储库获取已发布的父工件。因此,当您执行mvn install时 ,您会重复将每个模块发布到本地存储库。

在开发过程中,您自己的模块可能会被版本化为 XX-SNAPSHOT 之类的版本。对parent-pom的引用是XX-SNAPSHOT。在准备发布之前不要更改这些。

因此,一个简单的情况是:在首次发布之前,所有模块都称为 1.0-SNAPSHOT。当制作初始版本“黄金构建”时,将所有 1.0-SNAPSHOT 模块重命名为 1.0。当开始开发 1.1 版本时,您将所有版本号更改为 1.1-SNAPSHOT。等等...

惯例是在发布之前使用快照版本,此时您可以更新各处的版本号。在日常开发中,您不会更改版本号,因为快照版本的处理方式与硬版本版本不同。

编辑: 经过一番思考,我认为您在“评论”部分中的一些困惑是由此产生的:您的 pom 中的版本号反映了整个应用程序版本。任何给定的pom更改都不一定会更改应用程序版本号。如果您需要跟踪 pom 中的更改,我建议您使用源代码控制系统。因此,在您开发版本 1.0 的 3 个月期间,将版本号保持在 1.0-SNAPSHOT 是合理的。在(例如)您开发 1.1 的 3 周内,版本号是 1.1-SNAPSHOT。