【发布时间】: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 目标工作。有任何想法吗?提前致谢!
【问题讨论】: