我有一个像这样的maven项目基础设施:
/trunk/all/pom.xml
/trunk/all/libs/lib1/pom.xml
/lib2/pom.xml
...
/trunk/all/projects/p1/pom.xml
/p2/pom.xml
...
你知道,我有很多库和许多使用这些库的项目。
所有这些都合并到一个多模块项目中,因为我喜欢
mvn test
来编译和测试我的所有代码。目前,我的所有模块都是版本1.0-SNAPSHOT
。
现在我想要发布项目p2
,并且所有库p2
使用(例如lib1
和lib2
)到版本1.0
。之后,我在lib1
上进行了一些代码修改,但lib2
上的无。
我希望p2
的下一版本版本为1.1
,使用版本lib1
中的1.1
(自上次发布以来已修改),但{{1}仍然在版本lib2
(因为它没有被修改)。
更一般:如果我发布了一个版本,我想增加自上次发布以来所发布项目的次要编号和所有已更改的库。
我是否必须自己照顾所有模块版本,或者是否有能够为我完成所需工作的插件?
答案 0 :(得分:8)
我是否必须自己照顾所有模块版本,或者是否有能够为我完成所需工作的插件?
好吧,如果您不想让各种工件(项目,库)的版本与all/pom.xml
中定义的版本保持同步(即只是通过整个层次结构继承),我就是害怕你必须手动开始管理它们。我只是不确定为什么即使您没有对其进行任何更改,也不会碰到说lib2
的版本。使用当前的svn存储库结构,所有工件都以某种方式具有相同的发布生命周期(当您标记主干时,您将标记其中的所有内容)。
现在,如果p1
和p2
(为了简单起见,我会忽略这些库)一个独立的发布周期,我会推荐一个多个“主干” / 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,并作为正常的依赖项添加到核心项目中?
很抱歉,如果我不知何故错过了这一点,但我自己也遇到了多模块项目“问题”....也许问题根本不是问题?