常春藤如何使用版本控制标签

时间:2014-09-15 08:40:36

标签: tags dependencies ivy

我目前正在尝试了解生成VC标签时常春藤工作流程的方式(我们正在使用SVN,但这并不重要)。

问题是,我们开发了多个相互依赖的库。为了简化开发,ivy.xml中的依赖关系标记将属性rev设置为latest.integration

<dependencies>
    <dependency org="my-company" name="my-lib" rev="latest.integration"/>
</dependencies>

它实际上是StackOverflow上的结果形式this question。这有助于我们在一个库中快速进行更改,并在主应用程序中运行单元测试,而无需手动更改修订版。

开发完成后,我们将libs发布到内部共享Ivy存储库并创建SVN标记。

出现的问题是,一旦我们需要从标签重建软件,Ivy仍然指向latest.integration,在稍后的时间点,它很可能会指向另一个集成构建,甚至可能稍后发布的版本(取决于解析程序配置)。

现在问题很明显:在创建VCS标记时,让Ivy解析为integration.latest的已发布版本的最佳方法是什么。如果答案不是“在创建标记之前手动输入已发布的修订版本”,那将非常有用。也许我需要在我的ANT构建脚本中添加一些内容,可能会在settings.xmlivy.xml中进行一些更改。

由于常春藤是一个非常聪明和方便的小工具,我想必须有办法做到这一点......

1 个答案:

答案 0 :(得分:2)

常春藤deliver task用于从项目的原始文件中创建已解析的常春藤文件。 “已解决”是指适合发布到远程存储库的文件。这意味着不仅要解析动态依赖关系,还要在模块的info tag中设置可选的修订版和状态属性。

以下示例在构建目录中创建ivy.xml文件:

<ivy:deliver deliverpattern="${build.dir}/ivy.xml" pubrevision="${project.version}" status="release"/>    

检查您将发现已设置依赖项版本的文件。

此时值得注意的是,这种能力是将常春藤与Maven分开的微妙但重要的一点。 Ivy允许您的自动发布系统简单地创建标记并运行构建。看看Maven所需的复杂步骤,并通过它release plugin自动执行:

  1. 检查来源中没有未提交的更改
  2. 检查是否没有SNAPSHOT依赖项
  3. 将POM中的版本从x-SNAPSHOT更改为新版本(系统将提示您输入要使用的版本)
  4. 转换POM中的SCM信息以包含标记的最终目的地
  5. 针对修改后的POM运行项目测试以确认一切正常[/ li>]
  6. 提交修改后的POM
  7. 使用版本名称标记SCM中的代码(将提示)
  8. 将POM中的版本转换为新值y-SNAPSHOT(也会提示这些值)
  9. 提交修改后的POM
  10. 仔细计数....这是2次提交和标记操作.....所有因为Maven的模块版本是强制性的,我们试图在SCM中捕获已解析的依赖项....

    所以,我的建议是要小心模仿Maven。当我标记我的代码时,我捕获了一个时间点,当我构建代码时。我依赖于推送到我的远程存储库的常春藤文件已完全解决的事实。真正的偏执狂当然可以保留这个常春藤文件的本地副本,但它永远不会是用于构建原始文件的文件。在实践中,永远不可能真正重现原始二进制文件,只是近似于它的东西。

    其他信息

    为了帮助理解如何使用传递任务,以下示例显示了在将ANT人工制品发布到像Nexus这样的Maven存储库时如何使用它来创建已解析的Maven POM文件: