我已经读过一些文章,但我不明白如何为依赖项设置Ivy文件。我正在做的项目是旧的,我不太了解它,我有一个半生成半编辑的build.xml文件,它可以与Eclipse编译器一起使用。这是我第一次处理构建配置,我想将依赖项移到ivysettings.xml文件中,并改进可以改进的内容。我的目标是创建一个部署在Tomcat中的war。
最好的方法是什么?
build.xml:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project basedir="." default="build" name="Teamwork"
xmlns:ivy="antlib:org.apache.ivy.ant">
<property environment="env"/>
<property name="ECLIPSE_HOME" value="../../../../../Program Files/eclipse/"/>
<property name="debuglevel" value="source,lines,vars"/>
<property name="target" value="1.7"/>
<property name="source" value="1.7"/>
<path id="Web App Libraries.libraryclasspath">
<pathelement location="WebContent/WEB-INF/lib/Tidy.jar"/>
<pathelement location="WebContent/WEB-INF/lib/antlr-2.7.7.jar"/>
<pathelement location="WebContent/WEB-INF/lib/asm-attrs.jar"/>
<pathelement location="WebContent/WEB-INF/lib/asm.jar"/>
<pathelement location="WebContent/WEB-INF/lib/avro-1.5.1.jar"/>
<pathelement location="WebContent/WEB-INF/lib/aws-java-sdk-1.5.5.jar"/>
<pathelement location="WebContent/WEB-INF/lib/bsh-2.0b4.jar"/>
<pathelement location="WebContent/WEB-INF/lib/c3p0-0.9.2.1.jar"/>
<pathelement location="WebContent/WEB-INF/lib/commons-beanutils.jar"/>
[... other jars]
</path>
<path id="EAR Libraries.libraryclasspath"/>
<path id="Teamwork.classpath">
<pathelement location="bin"/>
<path refid="Web App Libraries.libraryclasspath"/>
<path refid="EAR Libraries.libraryclasspath"/>
</path>
<target name="init">
<mkdir dir="bin"/>
<copy includeemptydirs="false" todir="bin">
<fileset dir="src">
<exclude name="**/*.java"/>
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="bin"/>
</target>
<target depends="clean" name="cleanall"/>
<target depends="build-subprojects,build-project" name="build"/>
<target name="build-subprojects"/>
<target depends="init" name="build-project">
<echo message="${ant.project.name}: ${ant.file}"/>
<javac debug="true" debuglevel="${debuglevel}" destdir="bin" includeantruntime="false" source="${source}" target="${target}">
<src path="src"/>
<classpath refid="Teamwork.classpath"/>
</javac>
</target>
<target description="Build all projects which reference this project. Useful to propagate changes." name="build-refprojects"/>
<target description="copy Eclipse compiler jars to ant lib directory" name="init-eclipse-compiler">
<copy todir="${ant.library.dir}">
<fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
</copy>
<unzip dest="${ant.library.dir}">
<patternset includes="jdtCompilerAdapter.jar"/>
<fileset dir="${ECLIPSE_HOME}/plugins" includes="org.eclipse.jdt.core_*.jar"/>
</unzip>
</target>
<target description="compile project with Eclipse compiler" name="build-eclipse-compiler">
<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
<antcall target="build"/>
</target>
</project>
步骤1是清除<path id>
块;这就是您要重构为基于ivy的解决方案的内容。您需要一个列出依赖项的ivy.xml
文件。在这里可以找到一个例子——它可能会变得很复杂,你的例子可能会更简单。我建议使用test
、runtime
和build
配置,除非您有迫切需要,否则不需要更多。然后,对于每个依赖项,找出在哪些上下文中需要它(如果编译时需要在cp上使用,请使用"build"。如果运行时需要在cp上使用,则使用"runtime"。只有在测试时才使用"test"配置,而不是其他配置(所以,通常是junit,仅此而已(。
然后在你的蚂蚁文件中,你想做一些类似的事情:
<ivy:resolve file="buildScripts/ivy.xml" refresh="true" conf="build, runtime, test" />
<ivy:retrieve/>
这将使得这些罐子出现在lib/test
、lib/runtime
和lib/build
中。使用启动蚂蚁技巧来创建一个对象(不要明确列出每个jar(。当您删除依赖项时,这确实会造成严重破坏,因为这不会使jar文件消失,但可能更简单的做法是只进行ant clean(现在除了build
之外,还应该删除lib
目录(。有一些方法可以使ant<path>
对象脱离配置,但这更为复杂。