我想为我的Ant项目添加依赖项;例如,我想将hibernate依赖项添加到我的项目中。
我是蚂蚁的新手。在我使用maven工具构建项目之前。在maven中,很容易将依赖项添加到pom.xml
文件中。
我的build.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project name="Demo ANT Project-1" default="run">
<target name="run" depends="compile">
<java classname="com.company.product.RoundTest">
<classpath path="staging"/>
</java>
</target>
<target name="compile">
<javac includeantruntime="false" srcdir="./src" destdir="staging" />
</target>
</project>
我想在上面的Ant xml文件中添加依赖项。
请注意:这个问题是6年前新提出并回答的。
首先,Ant比Maven更老,因此不包括对依赖管理的核心支持。
添加常春藤
Ivy是Ant 的依赖管理框架
http://ant.apache.org/ivy/
要实现它,你需要做两件事。首先在构建文件的顶部包含ivy任务名称空间:
<project .... xmlns:ivy="antlib:org.apache.ivy.ant">
其次,你需要将常春藤罐安装到ANT用于第三方扩展的标准位置之一:
- $ANT_HOME/lib
- $HOME/.ant/lib
我喜欢让我的构建独立,所以包括一个自动为我做这件事的目标:
<available classname="org.apache.ivy.Main" property="ivy.installed"/>
<target name="install-ivy" description="Install ivy" unless="ivy.installed">
<mkdir dir="${user.home}/.ant/lib"/>
<get dest="${user.home}/.ant/lib/ivy.jar" src="http://search.maven.org/remotecontent?filepath=org/apache/ivy/ivy/2.3.0/ivy-2.3.0.jar"/>
<fail message="Ivy has been installed. Run the build again"/>
</target>
使用常春藤
这是一个非常广泛的主题,下面是下载hibernate jar及其依赖项的一个简单示例:
<target name="resolve" depends="install-ivy" description="Use ivy to resolve classpaths">
<ivy:cachepath pathid="compile.path">
<dependency org="org.hibernate" name="hibernate" rev="3.2.7.ga" conf="default">
<exclude org="javax.transaction"/>
</dependency>
</ivy:cachepath>
</target>
产生以下输出:
resolve:
[ivy:cachepath] :: Apache Ivy 2.3.0 - 20130110142753 :: http://ant.apache.org/ivy/ ::
[ivy:cachepath] :: loading settings :: url = jar:file:/home/mark/.ant/lib/ivy.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:cachepath] :: resolving dependencies :: #;working@mark
[ivy:cachepath] confs: [default]
[ivy:cachepath] found org.hibernate#hibernate;3.2.7.ga in public
[ivy:cachepath] found net.sf.ehcache#ehcache;1.2.3 in public
[ivy:cachepath] found commons-logging#commons-logging;1.0.4 in public
[ivy:cachepath] found asm#asm-attrs;1.5.3 in public
[ivy:cachepath] found dom4j#dom4j;1.6.1 in public
[ivy:cachepath] found antlr#antlr;2.7.6 in public
[ivy:cachepath] found cglib#cglib;2.1_3 in public
[ivy:cachepath] found asm#asm;1.5.3 in public
[ivy:cachepath] found commons-collections#commons-collections;2.1.1 in public
[ivy:cachepath] :: resolution report :: resolve 373ms :: artifacts dl 10ms
[ivy:cachepath] :: evicted modules:
[ivy:cachepath] commons-collections#commons-collections;2.1 by [commons-collections#commons-collections;2.1.1] in [default]
---------------------------------------------------------------------
| | modules || artifacts |
| conf | number| search|dwnlded|evicted|| number|dwnlded|
---------------------------------------------------------------------
| default | 10 | 0 | 0 | 1 || 9 | 0 |
---------------------------------------------------------------------
然后可以在javac任务中使用这个ivy管理的类路径
<javac includeantruntime="false" srcdir="./src" destdir="staging" classpathref="compile.path"/>
还是简单地将所有内容都放在一个蚂蚁目标中?
<target name="update-lib-dir">
<property name="ivy.install.version" value="2.4.0"/>
<property name="ivy.jar.file" value="lib-ant/ivy-${ivy.install.version}.jar"/>
<property name="lib-ivy.dir" value="lib-ivy"/>
<get src="https://repo1.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar"
dest="${ivy.jar.file}" usetimestamp="true" />
<taskdef resource="org/apache/ivy/ant/antlib.xml">
<classpath>
<pathelement location="${ivy.jar.file}"/>
</classpath>
</taskdef>
<!-- define your destination directory here -->
<retrieve pattern="${lib-ivy.dir}/[type]/[artifact]-[revision].[ext]" sync="true">
<!-- Add all your maven dependencies here -->
<dependency org="com.twelvemonkeys.imageio" name="imageio-jpeg" rev="3.4.2"/>
<dependency org="com.twelvemonkeys.imageio" name="imageio-tiff" rev="3.4.2"/>
</retrieve>
</target>
注意:之前创建您的ivy库目录。在本例中,您应该至少有一个名为lib-ant
的目录。
希望它能有所帮助:o)