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



我在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开发新手,请帮助。

下面的回答概述了使用ivy文件的综合解决方案。

  • Ivy依赖

它回答了一个不同的问题("提供的"依赖关系),但你最终会面临一个问题,因为不是你在构建中使用的所有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>

其次(回答您的问题),它是用于将ivy文件放在文件系统上的备用ivy检索任务。它也可以支持内联解析,如下所示:

<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>

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


你的另一个问题是相关的。使用ivy的内联模式很方便,但不是使用ivy最有效的方式。对resolve任务的单个调用可用于确定项目的所有依赖项,并使用配置将这些依赖项划分为各种类路径或文件集等。

  • 如何获取ivy:cachepath位置而不检查是否下载了依赖项

相关内容

  • 没有找到相关文章

最新更新