常春藤:本地解析和发布JAR

我们已经使用Ivy几个月,并在办公室的网络服务器上拥有自己的“常春藤回购”。 我们所有的项目都配置为转到此回购以解决依赖关系。

我们有许多我们许多项目使用的“commons”类型的JAR。 正因为如此,并且由于我们只有1个回购,我们发现来自以下场景的许多丑陋的开销:

  • 开发人员有权向Project 1添加一个功能(取决于Common jar)
  • 在开发Project 1的过程中,开发人员意识到他/她需要对Common jar进行更改
  • 常见的jar更改已经完成
  • 常见的jar必须通过代码审查和正常代码升级
  • Build master发布新的Common jar
  • 现在Common Jar已经更新,Project 1可以恢复开发
  • 这对我们的团队来说变得荒谬和痛苦。

    对我来说,显而易见的解决方案是在每个项目中提供ant目标,允许开发人员在本地发布/解析(往返于他们的文件系统)。 通过这种方式,他们可以在星期天将9种方法打破,但是在等待Common发布的同时不会丢失2 - 4天。 这样,开发人员对Project 1和Common进行了本地更改,并且代码一次性完成了我们的升级过程。

    我知道这对常春藤来说是可能的,但我对它很陌生,我甚至不知道从哪里开始。

    目前我们为所有项目使用全球ivy.settings文件。 在设置文件中,我们使用一个链式解析器,它内部有一个url解析器,它连接到我们的“常春藤回购”。

    我相信以下是唯一需要改变的地方,但我并不十分确定:

  • ivy.settings我们需要在url解析器被调用之前添加一个本地文件系统解析器; 这样,我们检查本地文件系统的依赖性,然后再转到常春藤回购(web服务器)
  • 以某种方式配置每个项目的ivy.xml并允许本地缓存发布
  • 调整Ant构建以具有执行上述选项的publish-locally目标
  • 我相信这些改变将使我们能够:(1)在查看Web服务器之前,始终在本地查找依赖关系,(2)作为构建选项(目标)在本地发布。

    如果不是这样,或者我错过了任何步骤, 请告知! 否则,我可能会想出如何从常青藤文档添加文件系统解析器,但不知道如何让publish-locally目标正常工作。 有任何想法吗? 提前致谢!


    常春藤支持动态修订:

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

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

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

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

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

    (请参阅常春藤发布任务上的状态属性)

    注意:在Maven中,您有两种类型的存储库,发行版和快照。 常春藤支持这个概念是更微妙和更强大的恕我直言。


    我也希望Marks的方法。

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

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

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

    链接地址: http://www.djcxy.com/p/57171.html

    上一篇: Ivy: Resolving and Publishing JARs Locally

    下一篇: How can I use MQTT in iOS?