【问题标题】:maven release plugin with multi modules, having distinct scm tags and version具有多模块的 maven 发布插件,具有不同的 scm 标签和版本
【发布时间】:2012-12-17 23:29:21
【问题描述】:

版本: 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 中创建了一个“构建/组装”项目分支,具有以下 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 发布命令

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 和版本)
  • 工件部署良好
  • 但svn中没有创建特征scm标签...

只执行了root build/assembly项目的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 maven-3 maven-release-plugin


    【解决方案1】:

    我想到的第一件事是在 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 ara。这称为多模块构建,它处理模块之间的依赖关系等事情,并将反应堆按正确的顺序排列。

    【讨论】:

    • 如果一切正常,我计划在我的 svn 外部配置中使用修订号,以便让我的构建和源代码管理处于静态状态。我不太同意您的评论:在我的情况下,svn externals 不是用于依赖管理,而是用于构建和组装目的(您可以将产品的构建视为多个分支中功能的组装)。我尝试使用 maven 来解决依赖管理工作并使用平面工作区。好的绝对网址建议,谢谢。
    • 该程序集也可以由 Maven 解决,这意味着在版本中具有不同的模块/功能,可以通过 Maven 项目进行组合;-)。但是有不同的分支嗯....但是正如我提到的,我建议使用可以发布等的多模块构建。功能可以在分支上开发并合并回发布集成线,如主干等。所以你避免外在的不好。
    猜你喜欢
    • 2013-05-24
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2016-03-01
    • 2016-05-05
    • 2014-03-07
    • 1970-01-01
    相关资源
    最近更新 更多