Tags Ivy如何使用版本控制标签

Tags Ivy如何使用版本控制标签,tags,dependencies,ivy,Tags,Dependencies,Ivy,我目前正试图找出在生成VC标记时常春藤的工作流程是怎样的(我们使用SVN,但这并不重要) 问题是,我们开发了多个相互依赖的库。为了简化开发,ivy.xml中的依赖项标记将属性rev设置为latest.integration <dependencies> <dependency org="my-company" name="my-lib" rev="latest.integration"/> </dependencies> 这实际上是StackOv

我目前正试图找出在生成VC标记时常春藤的工作流程是怎样的(我们使用SVN,但这并不重要)

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

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

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

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

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

现在,这个问题很明显:让常春藤来解析已发布的
integration.latest
版本的最佳方法是什么。如果答案不是“在创建标记之前手动输入已发布的修订”,这将非常有用。也许我需要在我的ANT构建脚本中添加一些东西,也许我的
settings.xml
ivy.xml
中需要做一些更改

由于Ivy是一个非常智能和方便的小工具,我想一定有办法做到这一点。

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

以下示例在生成目录中创建一个ivy.xml文件:

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

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

在这一点上,值得注意的是,这种能力是区分常春藤和梅文的微妙但重要的一点。Ivy允许您的自动发布系统简单地创建标签并运行构建。看看Maven所需的复杂步骤,以及它的自动化:

  • 检查源中是否没有未提交的更改
  • 检查是否没有快照依赖项
  • 将POMs中的版本从x-SNAPSHOT更改为新版本(系统将提示您输入要使用的版本)
  • 转换POM中的SCM信息以包括标记的最终目的地
  • 对修改后的POM运行项目测试,以确认一切正常
  • 提交修改后的POM
  • 用版本名标记SCM中的代码(将提示输入)
  • 将POMs中的版本切换到新值y-SNAPSHOT(也会提示输入这些值)
  • 提交修改后的POM
  • 仔细数。。。。这是2次提交和一次标记操作。。。。。所有这些都是因为Maven的模块版本是强制性的,我们正试图在SCM中捕获已解决的依赖项

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

    附加信息 为了帮助理解交付任务是如何使用的,以下示例展示了在将ANT工件发布到Maven存储库(如Nexus)中时如何使用交付任务创建已解析的Maven POM文件:


    谢谢你,马克。我认为交付任务正是我想要的。你写道,你依赖于出版的版本。但在我们的例子中,我们不会将主可执行应用程序发布到repo,因为它不会被任何人解析。因此,对于libs,我可能不需要“交付的”ivy.xml文件,但是对于主应用程序,我仍然不确定工作流会是什么样子。我的尝试是创建一个ANT任务,在项目根目录中创建一个
    ivy delivered.xml
    ,它将被签入VC repo。然后,每当需要复制标记版本时,交付的xml将用于覆盖ivy.xml,然后构建应用程序。这有道理吗?@jaw-Yes当然有道理。您正在Subversion中保存“ivy delivered.xml”,以便在灾难发生时重新创建构建。我采用另一种方法,使用存储在发行版存储库中的“ivy.xml”文件。在我的例子中,我使用Nexus作为所有发行版二进制文件(以及这些二进制文件的依赖项)的版本化存储。我标记源代码存储库,以便查看用于创建二进制文件的源代码。这将是一个罕见的事件,我被迫重建一个释放。如前所述,不可能产生完全相同的文件。事实上,在过去几个月里,我们发生了两次“罕见事件”,这就是为什么我要问;)原因不是重新创建确切的构建,而是从该标记创建错误修复分支。然而,随着时间的推移,一些lib已经发展(包括接口更改),因此我们需要使用这些lib的旧版本来避免可能的不兼容。