常春藤:本地解析和发布JAR
我们已经使用Ivy几个月,并在办公室的网络服务器上拥有自己的“常春藤回购”。 我们所有的项目都配置为转到此回购以解决依赖关系。
我们有许多我们许多项目使用的“commons”类型的JAR。 正因为如此,并且由于我们只有1个回购,我们发现来自以下场景的许多丑陋的开销:
这对我们的团队来说变得荒谬和痛苦。
对我来说,显而易见的解决方案是在每个项目中提供ant目标,允许开发人员在本地发布/解析(往返于他们的文件系统)。 通过这种方式,他们可以在星期天将9种方法打破,但是在等待Common发布的同时不会丢失2 - 4天。 这样,开发人员对Project 1和Common进行了本地更改,并且代码一次性完成了我们的升级过程。
我知道这对常春藤来说是可能的,但我对它很陌生,我甚至不知道从哪里开始。
目前我们为所有项目使用全球ivy.settings
文件。 在设置文件中,我们使用一个链式解析器,它内部有一个url解析器,它连接到我们的“常春藤回购”。
我相信以下是唯一需要改变的地方,但我并不十分确定:
ivy.settings
我们需要在url解析器被调用之前添加一个本地文件系统解析器; 这样,我们检查本地文件系统的依赖性,然后再转到常春藤回购(web服务器) ivy.xml
并允许本地缓存发布 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"
以便在本地发现某些内容时停止解析。