版本号: 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反应器插件可以帮助我很多,以正确的顺序部署和发布所有;-)然后我在svn中创建了一个"构建/组装"项目分支,具有以下svn外部:
feature1 http://host/svn/feature1/trunk
feature2 http://host/svn/feature2/trunk
...
使用svn外部的目标,是有一个平坦的工作空间(它避免了maven发布插件的问题…)。在这个构建项目中,我只有一个pom.xml,它是所有特性的多项目聚合器。
<modules>
<module>feature1</module>
<module>feature2</module>
<module>feature3</module>
...
</modules>
然后使用maven发布命令:
mvn -B release:clean release:prepare release:perform
与以下版本。
属性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提交的更改是ok的(scm url和版本)
- 工件部署良好
- 但是功能配置标签不是在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] ------------------------------------------------------------------------
特性的跳过状态在摘要中看起来很奇怪(但在提交和清理阶段是SUCCESS)
这个问题不太容易解释,我希望能弄清楚……有人遇到过同样的问题吗?有什么技巧/信息可以解决这个问题吗?
我想到的第一件事是在SVN中使用这样的外部:
feature1 http://host/svn/feature1/trunk
feature2 http://host/svn/feature2/trunk
...
将产生一个完全不可复制的状态,因为主干将来会改变,所以您无法重新创建这个确切的状态。此外,maven-release-plugin将使根部分(聚合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目录。这被称为多模块构建,它处理模块之间的依赖关系等问题,并将反应器排序为正确的顺序。