我目前正在尝试了解生成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.xml
或ivy.xml
中进行一些更改。
由于常春藤是一个非常聪明和方便的小工具,我想必须有办法做到这一点......
答案 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自动执行:
仔细计数....这是2次提交和标记操作.....所有因为Maven的模块版本是强制性的,我们试图在SCM中捕获已解析的依赖项....
所以,我的建议是要小心模仿Maven。当我标记我的代码时,我捕获了一个时间点,当我构建代码时。我依赖于推送到我的远程存储库的常春藤文件已完全解决的事实。真正的偏执狂当然可以保留这个常春藤文件的本地副本,但它永远不会是用于构建原始文件的文件。在实践中,永远不可能真正重现原始二进制文件,只是近似于它的东西。
为了帮助理解如何使用传递任务,以下示例显示了在将ANT人工制品发布到像Nexus这样的Maven存储库时如何使用它来创建已解析的Maven POM文件: