当前位置:  开发笔记 > 前端 > 正文

maven项目的层次结构,不散布版本号

如何解决《maven项目的层次结构,不散布版本号》经验,为你挑选了4个好方法。

如果您使用Maven2作为包含许多具有相同版本号的工件的项目的构建系统,则您将所有构建的版本分散在所有pom.xml中.在其中许多甚至两次 - 在人工制品本身的版本标签和父母的版本标签中.因此,您必须在每个版本开关上更改并检入所有pom.xml的新版本.这有点令人讨厌,特别是如果你需要为几个bug修复和一个开发版本并行编写代码.有办法吗?

澄清:我的问题是你的源代码管理系统中每个pom.xml的许多版本,它们只有pom的版本号和/或父pom的版本号不同.理想情况下,只需在添加依赖项或其他内容时更改pom即可.

例如,你有一个项目有文件foo-pom(所有的父pom),foobar-jar,foobaz-jar和foo-war.在第一个版本中,版本是1.0 - 它出现在每个pom.xml中.在第二个版本中,版本为1.1 - 它再次出现在每个pom.xml中.所以你必须改变每个pom.xml - 如果你经常发布,这很烦人.

更新:如果您认为这很重要:不必指定父版本已被考虑.请转到maven JIRA问题并投票给它以使其更受关注,并且更有可能在即将发布的版本中添加为增强功能.您需要为此创建/拥有JIRA登录.

还有另一个Stackoverflow问题基本上是同一个问题.



1> Matthew McCu..:

还有另一个StackOverflow线程也涵盖了您可能想要查看的主题.

简而言之,在使用继承时不必指定父版本已经在考虑之中.请转到JIRA并给它一个投票压力以使其更受关注,并且更有可能在即将发布的版本中添加为增强功能.



2> Olivier..:

在使用Maven 2构建的大型系统上工作时,我遇到了类似的问题.

在我看来,典型的多模块结构的缺点是所有模块必须共享相同的版本.这确实很烦人:即使您的下一个版本只包含一个错误修正foobar-jar,您需要在任何地方(手动或使用maven-release-plugin)更改全局版本 并滚动每个组件的新版本.在我的情况下,我构建了各种WAR/EAR应用程序,因此我的客户会问我为什么我提供了两者的新版本,app1并且app2只是app1应该受到影响.

相反的方法是将每个组件作为独立项目进行管理,并具有自己的独立版本.这更灵活,因为它允许部分发布,但您现在需要手动跟踪所有这些版本(知道下一次交付将包含哪些版本,确保内部依赖性是一致的,等等).这很快就会成为大型应用程序中的噩梦.

我一直在考虑将两种方法结合起来的方法:独立版本的灵活性,而不会放弃系统的全局一致性.我尝试了与romaintaz相同的方法,并遇到了同样的问题.最后,我提出了这个想法:http: //out-println.blogspot.com/2008/10/maven-modules-with-independent-versions.html.

将它视为"实验性的",因为我最终没有尝试它(非技术原因).但我认为它会成功.



3> Romain Linso..:

在我的项目中,我遇到了这样的问题.为了减少我在父pom.xml中定义的一些属性的数量,这些属性对应于每个模块的版本:


    1.0.0
    
    ${project-version}
    
    1.0.1
    ...

然后,在每个模块的pom.xml中,我使用这些属性.问题是我必须在这个pom.xml中明确输入父版本.例如,在我的业务pom.xml中,我有:


  4.0.0
  
  
    my.project
    parent
    1.0.0
  
  ...
  
    
    
      my.project
      project-persistence
      ${project-persistence-version}
    

但是,我真的建议您查看一下发布插件,它将为您修改所有版本号.



4> VonC..:

这是否本文为您提供问题的解决方案?

我们的想法是将整个项目的版本号声明为属性,即父pom中的"厌恶"(双关语).父pom自己的版本号可以是任何东西,只要它以"SNAPSHOT"结尾.

子模块的版本是通过$ {aversion}属性指定的.儿童对其父母版本的引用是硬编码的.但是,由于父pom的版本是SNAPSHOT,子模块将看到父pom中的更改.特别是,如果父pom更改$ {aversion}的值,孩子们将看到更改.

根据评论,这不是一个完美的解决方案.

而发布插件并没有解决真正的问题:合并.
遍布各处的版本号的无限副本意味着将分支重新组合在一起时会产生很多冲突.

注意:

使用Maven 2.0.9(最新版本 - 2008年4月)我只是忽略了各个模块的版本元素,因为它们将继承父版本的版本.如果您的模块与其父模块共享相同的groupId,则这也适用于groupId.


VonC是正确的,你可以省略你的pom的groupId和artifactId,如果你想让它们与父亲相同.但是,即使在多模块分层构建中,您仍然必须专门声明父级的版本.
推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有