如何使用 Ant 和 Ivy 构建项目及其依赖项

Posted

技术标签:

【中文标题】如何使用 Ant 和 Ivy 构建项目及其依赖项【英文标题】:How to build a project and it's dependencies using Ant and Ivy 【发布时间】:2011-01-18 09:24:03 【问题描述】:

我有一个包含两个依赖项的 WebApp,如下所示。我想使用 Ant + Ivy 构建一个用于在 Tomcat 上部署的战争文件。

+
+-MyWebApp // this Dynamic Java Web Application (deployed Tomcat and launches
           // a thread contained in MyApp) 
+-MyApp // this is just a vanilla Java Application
+-MyCommonStuff // these are common classes shared between MyApp and MyWebApp
                // Ex. Database access code & business classes

使用 Ant 文档,我研究了如何为每个项目创建适当的 build.xml 文件。 也就是说每个项目都有一个独立的build.xml,所以为了构建整个项目我要做的就是:

mkdir build
cd build
export SOME_COMMONBASE=`pwd`
svn co https://mybuildmachine.lan/svn/mycommonstuff mycommonstuff
cd mycommonstuff
ant
cd ..
% this produces mycommonstuff.jar
svn co https://mybuildmachine.lan/svn/myapp myapp
cd myapp
ant
cd ..
% this produces myapp.jar
svn co https://mybuildmachine.lan/svn/mywebapp mywebapp
cd mycommonstuff
ant
cd ..
% this produces mywebapp.war and deploys it to Tomcat

现在我想做的是将它们整合在一起,以便我可以开始一个构建。从表面上看,我应该能够以某种方式创建一个将依赖项连接在一起的 Ivy build.xml。但是,我已经阅读了 Ivy 文档并在 Google 上搜索了示例,但我仍然对如何完成这项任务一无所知。 有人可以给我一些关于如何做到这一点的指示吗?

【问题讨论】:

【参考方案1】:

您要做的是使用Ivy's Ant tasks 进行接线。那里有很多更精细的细节,但基本上你需要自己的 Ivy 存储库,然后只需在那里发布你自己的项目工件以在其他地方使用它们。

对于 JAR 库项目:

使用ivy:retrieve 获取依赖项,以便您可以将项目构建到库中。 使用 ivy:publish 将构建的 JAR 发布到您自己的 Ivy 存储库中。

对于 WAR 项目:

再次使用ivy:retrieve 获取依赖项,以便您可以将项目构建为WAR。

至于其他部分,Ant 本身有很多任务可以帮助你,还有一些其他的任务,例如svn task by tigris 用于从 SVN 获取源代码和Ant's optional SCP task 用于将 WAR 文件传输到外部服务器。

【讨论】:

以上是关于如何使用 Ant 和 Ivy 构建项目及其依赖项的主要内容,如果未能解决你的问题,请参考以下文章

从 Ivy.xml 下载依赖项

如何使用 ant 构建多个具有依赖关系的项目

无法从 eclipse 项目构建路径中的 apache ivy 依赖项导入类

如何使用 Ivy 构建和单元测试?

IVY - 多项目本地构建 - 模仿“解决工作空间中的依赖关系”

在旧的 Ant 项目中添加 Ivy