我在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位置而不检查是否下载了依赖项