【问题标题】:Specify artifact version outside of pom在 pom 之外指定工件版本
【发布时间】:2011-02-27 09:33:08
【问题描述】:

有没有办法在 POM 文件之外指定工件版本?

我有 2 个构建工件的 CI 项目。一个从“开发”分支构建“稳定”开发版本,另一个构建不稳定版本,这是将所有活动功能分支合并到开发分支的结果。我希望稳定版本构建为 xyz-1.0.jar,集成构建为 xyz-1.0-SNAPSHOT.jar。 CI 作业是否有办法运行 maven 任务或通过命令行指定是否应在不手动修改 POM 的情况下构建版本或快照 jar?目前我在 pom.xml 中将版本指定为 1.0。我考虑使用发布插件,但我不希望自动增加版本号并进行标记。

【问题讨论】:

    标签: maven-2 continuous-integration hudson


    【解决方案1】:

    简短的回答:不。以下是一些补充说明:

    • 对 CI 下的分支使用“已发布”版本(即非 SNAPSHOT)没有多大意义,因为即使有更新的版本可用,也不会再次下载已发布的版本。
    • 应标记已发布的版本(例如 1.0),维护是在从标记派生的分支中完成的(例如 1.0.1-SNAPSHOT)。
    • 如果您想区分从不同分支构建的版本,请在 POM 中使用不同的版本。

    【讨论】:

    • 在 Maven 配置文件中,我将 updatePolicy 设置为 always 用于开发版本存储库。即使在非 SNAPSHOT 的情况下,它也应该始终检查更新的版本,不是吗?
    • 小背景,我们有 50-60 个相互依赖的 jar,它们会非常频繁地更改和发布。我一直在努力避免不断增加版本号,因为你必须去更新几十个 POM。只有在引入破坏兼容性的更改时才会增加版本。
    • @Adam 第一条评论:不,工件在发布后不应该改变。您必须手动复制/删除文件。第二条评论:是的,我明白这一点,我同意最后一句话。对于第一部分,这就是发布插件很方便的原因(它会为您升级版本号)。
    • 感谢帕斯卡的帮助!更新版本号是问题所在。如果 jar A 是 20 个其他应用程序/jar 的依赖项,那么我必须找到这些 pom 并将其更新为新的 jar A 版本。我认为版本插件可以帮助更新部分,但是查找部分呢?另一个问题是集成构建使用什么版本?根据创建功能分支的时间,pom 中的版本可能存在冲突。由于构建是通过 CI 完成的,我无法手动解决冲突。也许这证明了它自己的主题。
    • @AdamB:确实,一旦您找到版本,版本插件可以帮助更新版本。但这并不能解决查找部分。现在,回到您最初的问题,我会为稳定的开发版本保留 1.0-SNAPSHOT,并为工作分支使用类似 1.0-work-SNAPSHOT 的东西。毕竟你的 60 个模块不需要依赖这个版本。
    【解决方案2】:

    我可以通过在我的 POM 中使用一个属性然后通过命令行覆盖它来完成此操作。

    pom.xml:

     ...
        <version>${artifactVersion}</version>
        <properties>
           <artifactVersion>1.0</artifactVersion>  <!-- default version -->
        </properties>
        ...
    

    然后用mvn -DartifactVersion=1.0-SNAPSHOT package覆盖

    但上面 Pascal 的回答更符合我的真正要求。我的解决方案更像是一种解决方法。

    【讨论】:

    • 我不确定这是否适用于继承(这就是我不建议这样做的原因)。
    【解决方案3】:

    您应该可以使用 maven profiles 实现此目的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      相关资源
      最近更新 更多