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

tan*_*ens 6 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
                   ...
Run Code Online (Sandbox Code Playgroud)

你看,我有很多库和许多使用这些库的项目.

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

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

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

现在我想发布项目,p2并且所有库都p2使用(例如lib1lib2)版本1.0.从那以后,我做了一些修改代码lib1,但没有lib2.

我希望下一个版本p2是版本1.1,lib1在版本中使用1.1(它自上一版本以来已被修改),但lib2仍然在版本中1.0(因为它没有被修改).

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

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

Pas*_*ent 8

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

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

现在,如果p1p2(为了简单起见我会忽略lib)有一个独立的发布周期,我会推荐一个多个"trunk/tags/branches"结构,如本主题所述:

myrepo
  + .links (2)
    + trunks
      + pom.xml
  + parent-pom (1)
    + trunk
      + pom.xml
  + project-A
    + trunk
      + pom.xml
  + project-B
    + trunk
      + pom.xml 
Run Code Online (Sandbox Code Playgroud)

1)项目的父POM有自己的发布周期.每个组件的POM都将它用作父级(简单地用groupId和 引用artifactId,否relativePath).对于版本,您必须首先释放父POM.

2)这是一种结构,可以轻松检查项目的特定分支,即通常是主干.subversion用户检出myrepo/.links/trunk以获取所有源的头版.诀窍是,该目录包含外部链接(即具有 svn:externals属性)到该项目的所有其他模块的中继(parent-pom,project-A,project-B).此目录中的pom.xml永远不会发布,它只包含三个模块的模块部分,以启用多模块构建.使用此构造,您可以轻松设置分支,例如:

myrepo
  + .links
    + branch-2.x
      + pom.xml
Run Code Online (Sandbox Code Playgroud)

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

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

也可以看看

相关问题