我正在尝试修改我的构建过程,以便在我的个人项目中使用带有apache常春藤的ant。它们由一些共享模块和一些依赖于共享模块的应用程序模块组成。为了这篇文章,让我们简化并说我有一个共享模块(common
)和一个依赖application
的应用程序模块(common
)。每个模块都有自己的有效svn存储库:
svn_repo_1/common/trunk
/branches
/tags
svn_repo_2/application/trunk
/branches
/tags
我将相关版本检查到一个平面结构的公共工作区:
workspace/common
workspace/application
通常,application
取决于已发布的common
版本,因此在构建common
时无需构建application
。
但是,当我需要向common
添加application
所需的新功能时,我希望application
依赖于我的最新common
版本工作区(无需发布我的存储库的公共内容)。
我认为这是latest.integration
的含义(即更改application
的ivy.xml以指定通用修订版的latest.integration)。我的目的是使用常春藤buildlist
任务来查找在构建应用程序之前需要构建的本地模块。但这不起作用,因为buildlist
任务似乎包含common / build.xml条目,无论应用程序的ivy.xml文件是否指定latest.integration或其他一些已发布的修订版。
我将不胜感激任何建议。我正在努力研究常春藤的文档和样本,所以任何真实的例子都会有所帮助。注意:我对Maven解决方案不感兴趣。
答案 0 :(得分:1)
我可以理解,为什么您不想将common
发布到您的回购邮件,可能会有一些情有可为的原因。但是,如果您是传递依赖关系管理的新手,我可以给您的第一条实用建议是总是将您的JAR / WARs /任何内容发布到您的仓库;不是工作区本地的中间“集成”。
原因很简单:Ivy只能抓取您在设置文件中定义的存储库(基本上)。如果您故意将common
之类的JAR保留在其中一个定义的存储库之外,那么:(a)Ivy无法解决传递依赖关系(其主要工作),以及(b)“下游”(依赖)JAR每次调整common
时都无法动态更新。因此,仅使用Ivy来不发布JAR有点适得其反;我很惊讶常春藤甚至把它作为一个特色。
我想我需要了解你不发布common
的动机。如果您只是在让ivy:publish
任务工作时遇到问题,请不要担心我可以提供大量示例来帮助您入门。但如果还有其他原因,那么我请您考虑这个解决方案:设置多个存储库。
也许您有一个“主要”存储库,其中大部分内容都已发布;然后你有一个“辅助”或“中间”存储库,只要有意义(为你)这样做就可以发布common
。然后,您可以使用两个不同的发布任务配置Ant构建,例如 publish-main 和发布集成。
通过这种方式,你可以获得两全其美的效果:你可以获得中间临时区域,并且可以将所有内容保存在常春藤的强大控制之内。