svn – 具有多个模块的maven发布插件,具有不同的scm标签和版本

版本:maven 3.0.4,发布插件2.4.0

目标是使用maven发布插件以非交互方式一步发布多个功能(项目).我用的是:http://maven.apache.org/maven-release/maven-release-plugin/examples/non-interactive-release.html

Svn结构:

http://host/svn/feature1/trunk | tags | branches
http://host/svn/feature2/trunk | tags | branches
http://host/svn/feature3/trunk | tags | branches

每个功能都有一个pom.xml,具有特定的版本名称和scm url部分.

有了这个结构,我希望一步发布所有功能(有超过12个功能,以及它们之间的依赖关系……).我认为maven reactor插件可能对我有很大的帮助,以正确的顺序部署和释放所有内容;-)然后我在svn中创建一个“build / assembly”项目分支,具有以下svn外部:

feature1 http://host/svn/feature1/trunk
feature2 http://host/svn/feature2/trunk
...

使用svn externals的目标是拥有一个平面工作区(它避免了maven发布插件的问题……).在这个构建项目中,我只有一个pom.xml,所有功能的多项目聚合器.

<modules>
    <module>feature1</module>
    <module>feature2</module>
    <module>feature3</module>
    ...
</modules>

然后我使用maven release命令:

mvn -B release:clean release:prepare release:perform

使用以下release.properties

project.rel.org.sample.test\:feature1=1.0.0-RC1
project.dev.org.sample.test\:feature1=1.0.0-RC2-SNAPSHOT
project.scm.org.sample.test\:feature1.developerConnection=scm\:svn\:http\://host/svn/feature1/trunk
project.scm.org.sample.test\:feature1.connection=scm\:svn\:http\://host/svn/feature1/trunk

project.rel.org.sample.test\:feature2=1.0.0-RC1
project.dev.org.sample.test\:feature2=1.0.0-RC2-SNAPSHOT
...

使用此文件和-B参数,不需要交互式输入,向用户询问功能版本.所以,这项工作可以使用jenkins启动:D ……

在这一步:

> scm提交的更改都可以(scm url和version)
>工件部署得很好
>但是功能scm标签不是在svn中创建的……

只执行了根构建/汇编项目的scm标记…

[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Reactor Summary:
[INFO] [INFO]
[INFO] [INFO] build ..................................... SUCCESS [1.104s]
[INFO] [INFO] feature1 .................................. SUCCESS [0.187s]
[INFO] [INFO] feature2 .................................. SUCCESS [0.648s]
[INFO] [INFO] feature3 .................................. SUCCESS [0.370s]
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] BUILD SUCCESS
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] [INFO] Total time: 2.552s
[INFO] [INFO] Finished at: Thu Jan 03 14:45:37 CET 2013
[INFO] [INFO] Final Memory: 9M/22M
[INFO] [INFO] ------------------------------------------------------------------------
[INFO] Cleaning up after release...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] build ............................................. SUCCESS [7.201s]
[INFO] feature1 .......................................... SKIPPED
[INFO] feature2 .......................................... SKIPPED
[INFO] feature3 .......................................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

功能的SKIPPED状态在摘要中似乎很奇怪(但它是提交和清理阶段的成功)

问题不是很容易解释,我希望明确……

有人遇到过同样的问题吗?
一些技巧/信息来解决这个问题?

最佳答案 我想到的第一件事就是在SVN中使用externals,如下所示:

feature1 http://host/svn/feature1/trunk
feature2 http://host/svn/feature2/trunk
...

将产生一个根本不可再生的状态,因为树干将来会改变,所以你不能重新创建这个确切的状态.此外,maven-release-plugin只会使根部分(aggegration pom)的标记正确.另一方面,应该在与外部的关系中使用绝对URL.

除了以上之外,听起来你正在使用SVN作为依赖管理工具而不是它的目的,因为Maven是为这样的东西而设计的,特别是如果你在那些听起来不像功能的功能之间有关系它听起来更像是模块而不是的功能.结果是你应该改变你的结构:

  +-- root (pom.xml with modules list)
       +--- module-1 (pom.xml)
       +--- module-2 (pom.xml)
       +--- module-3 (pom.xml)
       +--- module-4 (pom.xml)
       ...

在SVN中,您必须将根文件夹放入项目的主干中,并在根pom.xml文件中仅定义一个scm ara.这称为多模块构建,它处理模块之间的依赖关系,并将反应器命令为正确的顺序.

点赞