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)
你看,我有很多库和许多使用这些库的项目.
所有这些都结合到一个多模块项目中,因为我喜欢
mvn test在完成一些全局重构之后,只做一个单独的编译和测试我的所有代码.目前,我的所有模块都是版本1.0-SNAPSHOT.
现在我想发布项目,p2并且所有库都p2使用(例如lib1和lib2)版本1.0.从那以后,我做了一些修改代码lib1,但没有上lib2.
我希望下一个版本p2是版本1.1,lib1在版本中使用1.1(它自上一版本以来已被修改),但lib2仍然在版本中1.0(因为它没有被修改).
更一般:如果我发布了一个版本,我想增加自上次发布以来发布项目的次要编号以及所有已更改的库.
我是否必须自己照顾所有模块版本,或者是否有能够为我完成所需工作的插件?
我是否必须自己照顾所有模块版本,或者是否有能够为我完成所需工作的插件?
好吧,如果你不想保持各种工件(项目,库)的版本与定义的版本同步all/pom.xml(即只是通过整个层次结构继承),我恐怕你必须开始手动管理它们.我只是不确定为什么lib2即使你没有对它进行任何修改也不会破坏说法的版本.使用您当前的svn存储库结构,所有工件都以某种方式具有相同的发布生命周期(当您标记主干时,您将标记其中的所有内容).
现在,如果p1和p2(为了简单起见我会忽略lib)有一个独立的发布周期,我会推荐一个多个"trunk/tags/branches"结构,如本主题所述:
Run Code Online (Sandbox Code Playgroud)myrepo + .links (2) + trunks + pom.xml + parent-pom (1) + trunk + pom.xml + project-A + trunk + pom.xml + project-B + trunk + pom.xml1)项目的父POM有自己的发布周期.每个组件的POM都将它用作父级(简单地用
groupId和 引用artifactId,否relativePath).对于版本,您必须首先释放父POM.2)这是一种结构,可以轻松检查项目的特定分支,即通常是主干.subversion用户检出myrepo/.links/trunk以获取所有源的头版.诀窍是,该目录包含外部链接(即具有
svn:externals属性)到该项目的所有其他模块的中继(parent-pom,project-A,project-B).此目录中的pom.xml永远不会发布,它只包含三个模块的模块部分,以启用多模块构建.使用此构造,您可以轻松设置分支,例如:Run Code Online (Sandbox Code Playgroud)myrepo + .links + branch-2.x + pom.xml
我已经多次使用过这个设置了(我已经在这里写了关于它的文章,请看下面的相关问题),它运行得很好.实际上,许多项目,包括Maven,都在使用这种方法,这不是一个幻想.
这不会解决你的"自动化"版本处理(我不知道任何解决方案),但至少,这个结构与Maven Release Plugin很好地配合,并支持你的独立发布周期要求.