如何在我的build.xml中将所有依赖项部署到tomcat

时间:2016-09-04 07:24:52

标签: java tomcat ant ivy

我在build.xml中有一个大头钉,它将所有依赖项下载到缓存中:

<target name="init" depends="init-ivy">
  ...
  <ivy:cachepath
    inline="true"
    module="jersey-container-servlet"
    organisation="org.glassfish.jersey.containers"
    pathid="jersey.classpath"
    revision="2.23.2"/>
  <ivy:cachepath
    inline="true"
    module="javax.json"
    organisation="org.glassfish"
    pathid="json.classpath"
    revision="1.0.4"/>
  ...
</target>

代码编译成功并创建了war文件。现在我需要编写一个将应用程序部署到tomcat的任务。我需要将所有依赖项复制到应用程序的WEB-INF/lib。这是怎么做到的?也许有一种方法可以将依赖项的JAR包含在WAR文件中?我是Java开发的新手,请帮助。

1 个答案:

答案 0 :(得分:1)

以下答案使用ivy file概述了全面的解决方案。

它回答了一个不同的问题(&#34;提供了#34;依赖关系),但最终会面临一个问题,因为您的构建中使用的所有jar都不需要随应用程序一起提供(因为它们已经存在于tomcat中)

尝试将此答案应用于您的问题并不简单,因为您正在以内联模式解析依赖关系(无常春藤文件)。首先,我建议将依赖项组合到一个路径中,而不是围绕每个依赖项创建路径:

<ivy:cachepath pathid="compile.classpath">
  <dependency org="org.glassfish" name="javax.json" rev="1.0.4" />
  <dependency org="org.glassfish.jersey.containers" name="jersey-container-servlet" rev="2.23.2" />    
</ivy:cachepath>

其次(并回答您的问题),它是用于将常春藤文件放在文件系统上的备用常春藤retrieve任务。它也可以支持inline resolution,如下所示:

<ivy:retrieve pattern="${build.dir}/lib/[artifact].[ext]">
  <dependency org="org.glassfish" name="javax.json" rev="1.0.4" />
  <dependency org="org.glassfish.jersey.containers" name="jersey-container-servlet" rev="2.23.2" />    
</ivy:retrieve>

<war destfile="${war.file}" webxml="${resources.dir}/web.xml">
    <fileset dir="${resources.dir}" excludes="web.xml"/>
    <lib dir="${build.dir}/lib"/>
</war>

总而言之,虽然这个建议的答案可行,但我建议调查配置如何与外部常春藤文件协同工作来管理您的依赖项。配置可能看起来具有挑战性,但它们也非常强大。

您的其他问题是相关的。使用常春藤的内联模式很方便,但不是使用常春藤的最有效方式。可以使用对resolve任务的单个调用来确定所有项目的依赖项,并使用配置将这些依赖项分区为各种类路径或文件集等。