如何在多模块项目中处理maven版本?

时间:2010-10-27 19:02:39

标签: maven-2 maven-release-plugin

我有一个像这样的maven项目基础设施:

/trunk/all/pom.xml
/trunk/all/libs/lib1/pom.xml
               /lib2/pom.xml
               ...
/trunk/all/projects/p1/pom.xml
                   /p2/pom.xml
                   ...

你知道,我有很多库和许多使用这些库的项目。

所有这些都合并到一个多模块项目中,因为我喜欢

  • 将顶级项目导入eclipse并立即提供所有库和项目
  • 在我完成一些全局重构之后,只编写一个mvn test来编译和测试我的所有代码。

目前,我的所有模块都是版本1.0-SNAPSHOT

现在我想要发布项目p2,并且所有库p2使用(例如lib1lib2)到版本1.0。之后,我在lib1上进行了一些代码修改,但lib2上的

我希望p2的下一版本版本为1.1,使用版本lib1中的1.1(自上次发布以来已修改),但{{1}仍然在版本lib2(因为它没有被修改)。

更一般:如果我发布了一个版本,我想增加自上次发布以来所发布项目的次要编号和所有已更改的库。

问题

我是否必须自己照顾所有模块版本,或者是否有能够为我完成所需工作的插件?

2 个答案:

答案 0 :(得分:8)

  

我是否必须自己照顾所有模块版本,或者是否有能够为我完成所需工作的插件?

好吧,如果您不想让各种工件(项目,库)的​​版本与all/pom.xml中定义的版本保持同步(即只是通过整个层次结构继承),我就是害怕你必须手动开始管理它们。我只是不确定为什么即使您没有对其进行任何更改,也不会碰到说lib2的版本。使用当前的svn存储库结构,所有工件都以某种方式具有相同的发布生命周期(当您标记主干时,您将标记其中的所有内容)。

现在,如果p1p2(为了简单起见,我会忽略这些库)一个独立的发布周期,我会推荐一个多个“主干” / tags / branches“this thread中描述的结构:

myrepo
  + .links (2)
    + trunks
      + pom.xml
  + parent-pom (1)
    + trunk
      + pom.xml
  + project-A
    + trunk
      + pom.xml
  + project-B
    + trunk
      + pom.xml 
     

1)项目的父POM有   一个自己的发布周期。一切   组件的POM将其用作父级   (仅使用groupId和   artifactId,没有relativePath)。对于   你必须发布一个版本   父母POM第一。

     

2)这是一个启用的结构   轻松检查特定分支   该项目通常是   树干。 subversion用户签出   获取头部的myrepo / .links / trunk   修订所有来源。诀窍是,   该目录包含   外部链接(即与   svn:externals财产)到   所有其他模块的中继线   项目(parent-pom,project-A,   项目-B)。这个中的pom.xml   目录永远不会发布,它   只包含一个模块部分   启用多个模块的三个模块   模块构建。有了这个结构   你可以轻松设置分支机构   e.g:

myrepo
  + .links
    + branch-2.x
      + pom.xml

我已经多次使用过这个设置了(我已经在SO上写过这个,请看下面的相关问题),它运行得很好。实际上,许多项目,包括Maven,都在使用这种方法,它不是一种幻想。

这不会解决你的“自动化”版本处理(我不知道任何解决方案),但至少,这个结构与Maven Release Plugin很好地配合,并且会支持你的独立发布周期要求。

另见

相关问题

答案 1 :(得分:1)

HI! 也许我错过了一些东西,但是如果你的libs / modules开始觉得需要拥有自己的版本号,那并不表示他们正在成长并拥有自己的生活 - 即成为独立的项目他们自己呢?

意味着将它们视为可能有意义 - 将它们视为单独的项目,推送到某个mvn repo,并作为正常的依赖项添加到核心项目中?

很抱歉,如果我不知何故错过了这一点,但我自己也遇到了多模块项目“问题”....也许问题根本不是问题?