tags - Ivy 如何与版本控制标签一起工作

标签 tags dependencies ivy

我目前正在尝试了解生成 VC 标签时 Ivy 工作流程如何(我们使用的是 SVN,但这并不重要)。

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

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

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

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

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

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

既然Ivy是一个相当聪明又方便的小工具,我想一定有办法做到这一点......

最佳答案

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

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

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

检查文件,您会发现依赖版本已设置。

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

  1. 检查源中是否存在未提交的更改
  2. 检查是否存在 SNAPSHOT 依赖项
  3. 将 POM 中的版本从 x-SNAPSHOT 更改为新版本(系统将提示您选择要使用的版本)
  4. 转换 POM 中的 SCM 信息以包含标签的最终目的地
  5. 针对修改后的 POM 运行项目测试,以确认一切正常工作
  6. 提交修改后的 POM
  7. 使用版本名称标记 SCM 中的代码(系统会提示输入)
  8. 将 POM 中的版本更改为新值 y-SNAPSHOT(系统也会提示输入这些值)
  9. 提交修改后的 POM

仔细数一下...这是 2 次提交和一个标记操作...都是因为 Maven 的模块版本是强制性的,并且我们试图在 SCM 中捕获已解析的依赖项...

所以,我的建议是谨慎模仿 Maven。当我标记代码时,我捕获了构建代码的时间点。我依赖的事实是,推送到我的远程存储库的 ivy 文件已完全解析。真正偏执的人当然可以保留此 ivy 文件的本地副本,但它永远不会是用于构建原始文件的文件。实际上,永远不可能真正重现原始二进制文件,而只是近似它的东西。

其他信息

为了帮助理解如何使用交付任务,以下示例展示了在将 ANT 工件发布到 Nexus 等 Maven 存储库时如何使用它来创建已解析的 Maven POM 文件:

关于tags - Ivy 如何与版本控制标签一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25843936/

相关文章:

Xcode 使用 FIXME、TODO、???,?

java - 在哪里可以找到 Artifactory 存储库的 Ivy 描述符

eclipse - Ivy 下载的 jar 数量超出预期

java - <c :out/> unknown tag

android - 识别编辑文本中的当前主题标签或标签

javascript - 在 script 标签内的不同 HTML 文件中运行 JavaScript 函数

python - Pip 安装失败 : SSL required

java - 嵌套异常是 java.lang.NoClassDefFoundError : org/slf4j/impl/MessageFormatter

scala - 如何在 sbt 中的 'package' 期间禁用依赖项解析