【问题标题】:Ivy: Resolving and Publishing JARs LocallyIvy:在本地解析和发布 JAR
【发布时间】:2012-02-10 12:27:42
【问题描述】:

我们已经使用 Ivy 几个月了,并且在办公室的 Web 服务器上拥有自己托管的“Ivy Repo”。我们所有的项目都配置为转到这个 repo 来解决依赖关系。

我们的许多项目都使用了几个“公用”类型的 JAR。正因为如此,而且因为我们只有 1 个 repo,我们发现以下场景带来了很多难看的开销:

  • 为开发人员分配了一项任务,即向项目 1(依赖于 Common jar)添加功能
  • 在开发项目 1 的过程中,开发人员意识到他/她需要对 Common jar 进行更改
  • 进行了常见的 jar 更改
  • 普通jar要经过代码审查和正常代码推广
  • Build master 发布新的 Common jar
  • Common jar 已更新,项目 1 可以恢复开发

这对我们的团队来说变得荒谬和痛苦。

对我来说,显而易见的解决方案是在每个项目中提供 ant 目标,允许开发人员在本地发布/解析(与他们的文件系统之间)。这样一来,他们可以 9 种方式打破 Common jar 到周日,但在等待 Common 发布时不会损失 2-4 天。这样,开发者就可以对 Project 1 和 Common 进行本地更改,并且代码会一次性通过我们的升级流程。

我知道 Ivy 可以做到这一点,但我对它太陌生了,我什至不知道从哪里开始。

目前,我们为所有项目使用全局 ivy.settings 文件。在设置文件中,我们使用了一个链式解析,其中包含 1 个 url 解析器,它连接到我们的“ivy repo”。

相信以下是唯一必要的更改,但我不是 100% 确定:

  • ivy.settings 中,我们需要在调用url 解析器之前添加一个本地文件系统解析器;这样,我们在转到 ivy 存储库(Web 服务器)之前检查本地文件系统的依赖关系
  • 为每个项目的ivy.xml 配置一个允许本地缓存发布的选项
  • 调整 Ant 构建,使其具有执行上述选项的 publish-locally 目标

相信这些更改将使我们能够:(1) 在查找 Web 服务器之前始终在本地查找依赖项,(2) 作为构建选项(目标)在本地发布。

如果这不是真的,或者我遗漏了任何步骤,请指教!否则,我可能可以从 Ivy 文档中弄清楚如何添加文件系统解析器,但不知道如何让publish-locally 目标工作。有任何想法吗?提前致谢!

【问题讨论】:

    标签: java ivy


    【解决方案1】:

    我也更喜欢 Marks 方法。

    对于publish-locally,您可以告诉发布任务使用哪个解析器(resolver="local")。通过这种方式,它可以发布到本地文件系统或任何已定义的解析器。

    <ivy:publish 
            resolver="local" 
            overwrite="true"
            revision="${project.version}">  
            <artifacts pattern="dist/[artifact]-[revision].[type]" />
        </ivy:publish>
    

    如果您使用链式解析器,您应该设置returnFirst="true",以便在本地找到某些内容时停止解析。

    【讨论】:

      【解决方案2】:

      Ivy 支持动态修订:

      稳定的代码将引用最新批准的 commons jar 版本:

      <dependency org="my-org" name="commons" rev="latest.release"/>
      

      不稳定(开发中)代码将引用该代码的最新未批准版本

      <dependency org="my-org" name="commons" rev="latest.integration"/>
      

      因此,您需要更改公共模块的构建过程,使其具有两个发布目标。一个用于代码的不稳定快照,另一个用于正式发布。

      (查看 ivy publish 任务的状态属性)

      注意: 在 Maven 中,您有两种类型的存储库,发布和快照。 Ivy 对这个概念的支持更加微妙和强大,恕我直言。

      【讨论】:

        猜你喜欢
        • 2016-02-29
        • 2012-02-12
        • 2017-03-07
        • 2015-09-18
        • 2011-11-02
        • 2018-02-24
        • 1970-01-01
        • 2015-08-07
        • 2012-10-30
        相关资源
        最近更新 更多