Apache Ant + Ivy 构建了一个部署到本地 Tomcat 的 Web 应用程序

Posted

技术标签:

【中文标题】Apache Ant + Ivy 构建了一个部署到本地 Tomcat 的 Web 应用程序【英文标题】:Apache Ant + Ivy build of a web application which is deployed to a local Tomcat 【发布时间】:2010-09-30 15:43:42 【问题描述】:

我将使用 Apache Ant 和 Apache Ivy 构建一个部署到本地 Tomcat 实例的 Web 应用程序(在开发期间)。我有一些问题:

    我想从运行良好的 Maven2 存储库中获取我的大部分依赖项,但对于 servlet JAR,我想使用 Tomcat 提供的那个。有没有办法使用 Ivy 做到这一点?您对此有何看法? 我使用 Ant 下载 Ivy JAR 以将其“自动安装”到 ~/.ivy2/jar/ivy.jar 中,并且 Ivy 缓存位于其默认位置 ~/.ivy2/cache 。我故意将这两个位置都保留在项目目录之外。好主意吗? 您是否有示例说明如何使用 Ant 构建文件、Ivy 解决依赖关系、编译 WAR 文件并将其部署到本地(目前)Tomcat 安装?我正在寻找一些可以作为最佳实践的东西,然后我可以进一步修改。 我在 Ivy 网站上使用了一些示例并对其进行了修改。有什么我应该改变的吗?构建文件可以在 http://pastebin.com/f7b34abc2 看到,因为我在这里粘贴 XML 代码时遇到了问题。

(请注意,我不是寻找我应该使用 Maven2 的建议,即使该建议是出于好意。)

【问题讨论】:

【参考方案1】:

在运行时,tomcat 将使用它自己的,因为它的类加载器将排除其中包含javax.servlet.Servlet 的任何 jar。如果您真的必须针对它进行编译,则必须在 ant 脚本中进行,然后复制它或在编译类路径中引用它。

另一方面,按需下载 ivy 是个好主意,因为它会阻止像我过去所做的那样将 ivy jar 检查到项目 scm 存储库中,无论您将其下载到项目目录还是用户主目录个人喜好问题。另一方面,常春藤缓存应该与其他项目共享,因此用户主目录是一个很好的位置。

一旦您完成了 ivy:retrieve,构建 war 文件并没有什么不同,因为所需的 jar 文件将是项目的本地文件,只需像往常一样使用 ant war 任务来创建 war。这是 ivy 的一个优势,一旦 jar 被下载,它在构建中就不再需要做任何事情了,你可以使用 ant 来编译和打包你的项目。

快速查看了您的构建文件,看起来非常正常。

希望这会有所帮助。

【讨论】:

感谢您的回答!它有很大帮助。然后我将使用 Maven2 存储库中可用的 servlet api jar 进行编译,因为 Tomcat 无论如何都会使用它自己的。到目前为止,这确实是最难的部分,很高兴您对此有所了解! :-)

以上是关于Apache Ant + Ivy 构建了一个部署到本地 Tomcat 的 Web 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

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

从 Ivy.xml 下载依赖项

在旧的 Ant 项目中添加 Ivy

Apache Ant 和 Ivy:生成了错误的依赖项

Apache Ivy buildnumber 非常缓慢

如何解决模块 X 的多个工件被检索到 Apache Ivy 中的同一个文件?