2011-11-13 74 views
1

我想修改我的构建过程使用Ant与我的个人项目的Apache常春藤建设。它们由几个共享模块和一些依赖共享模块的应用程序模块组成。对于这个帖子的缘故,让我们简化和说我有一个共享的模块(common),并取决于common应用模块(application)。每个模块都有它自己的有效SVN仓库:如何使用常春藤/蚂蚁使用中间文物

svn_repo_1/common/trunk 
       /branches 
       /tags 
svn_repo_2/application/trunk 
         /branches 
         /tags 

我检查了相关修订成一个公共工作区,在平面结构:

workspace/common 
workspace/application 

一般来说,application将取决于一个发布版本common,所以建设application时不需要搭建common

然而,当我需要新的功能添加到commonapplication需要,我会然后像application为依赖于我的工作区的最新common版本(无需发布常见到我的仓库)。

我认为这是latest.integration的含义(即更改application的ivy.xml以指定通用修订版的latest.integration)。我的意图是使用常春藤buildlist任务来查找在构建应用程序之前需要构建的本地模块。但这不起作用,因为buildlist任务似乎包括common/build.xml条目,无论应用程序的ivy.xml文件是否指定latest.integration或某个其他发布的修订。

我将不胜感激任何建议。我正在努力处理常春藤的文档和样本,所以任何现实世界的例子也会有所帮助。注意:我对这里的Maven解决方案不感兴趣。

回答

1

哇,这真是似曾相识!从3到4个月前回到本网站的一些第一个问题,他们几乎都与常春藤有关!我百分之百地认为常春藤是一种难以学习和驯服的野兽,但现在在专业使用几个月后,我再也无法发展它。所以我的第一条建议是:继续前进。迟早,您在Apache Ivy上找到的一些(实用的)文档都将开始变得有意义并开始发挥作用。

我能理解有可能是你为什么不想发布common到您的回购情有可原的原因。但是,如果你是一个新来的要依赖管理,实际的咨询意见的第一件,我可以给你的是,你应该始终发布您的JAR/WAR的/不管你的回购;而不是您的工作空间本地的中介“集成”。

这样做的原因很简单:常春藤只抓取你在你的设置文件(基本)定义库的能力。如果您故意在这些定义的存储库之外保留一个类似common的JAR,那么:(a)Ivy无法解决传递依赖关系(其主要工作),以及(b)“下游”(依赖)JAR无法动态地每当你调整common时更新。因此,使用Ivy仅对而不是发布JAR是有点反作用的;我很惊讶常春藤甚至将其作为一项功能。

我想我会需要了解你的动机不发布common。如果您在执行ivy:publish任务时遇到问题,请不用担心,我可以提供大量示例帮助您入门。但是如果还有其他一些原因,那么我请你考虑这个解决方案:设置多个存储库。或许你有一个“主”存储库,其中大部分内容都被发布;然后你有一个“二级”或“中介”资料库,你可以在任何时候发布common来做到这一点。然后,您可以使用两种不同的发布任务来配置Ant构建,例如publish-mainpublish-integration

通过这种方式,您可以获得两全其美的效果:您可以获得中间转场区域,并且可以将所有内容都保存在常春藤的强大控制中。

+0

感谢您的回复。我之所以不想在构建中间构建时发布'common'是因为我将ivysvn用于我的主存储库 - 因此已发布的构件会签入到单独的svn存储库中。我不想要一个通用的latest.integration.jar继续承诺。我喜欢你多个存储库建议的声音。我是否可以使用这两个存储库来解决问题,以便我的主ivysvn存储库中的第三方工件从那里解析,而我的common-latest.integration.jar是从本地目录存储库中解析出来的? – zorgbargle