Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add dependency to Ant project

Tags:

ant

I would like to add dependency to my Ant project; for example I want to add hibernate dependency to my project.

I'm new to Ant. Before I used maven tool to build project. in maven it is very easy to add dependency to pom.xml file.

My build.xml file

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

I want to add dependency to above Ant xml file.

like image 854
jijesh Aj Avatar asked Oct 30 '14 10:10

jijesh Aj


People also ask

Can Ant download dependencies?

In a previous article I stepped through development of an Ant script to build a target JAR file and run unit tests against it. Where we left off, the project depended on the developer manually populating a library directory with JUnit and its dependency.

How do I check Ant dependency?

Use the defined taskdefs: dependency-check - the primary task used to check the project dependencies. dependency-check-purge - deletes the local copy of the NVD; this should rarely be used (if ever). dependency-check-update - downloads and updates the local copy of the NVD.

Which file is used to define dependency in Ant?

The first time the build is run, the dependencies will be resolved from the repository, and the task will generate a file called "build-dependencies. xml". This file contains a list of the properties and fileset references generated during the build.


1 Answers

PLEASE NOTE: This question was asked and answered newly 6 years ago.

First of all Ant is older than Maven and therefore does not include core support for dependency management.

Adding ivy

Ivy is a dependency management framework for Ant

http://ant.apache.org/ivy/

To enable it you need to do two things. First include the ivy task namespace to the top of your build file:

<project .... xmlns:ivy="antlib:org.apache.ivy.ant">

A secondly you'll need to install the ivy jar into one of the standard locations that ANT uses for it's 3rd party extensions:

  • $ANT_HOME/lib
  • $HOME/.ant/lib

I like to make my builds standalone so include a target that does this for me automatically:

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

Using ivy

This is a very extensive subject, the following is a simple example to download the hibernate jar and it's dependencies:

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

Produces the following output:

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

This ivy managed classpath can then be used in your javac task

<javac includeantruntime="false" srcdir="./src" destdir="staging" classpathref="compile.path"/>
like image 79
Mark O'Connor Avatar answered Oct 04 '22 17:10

Mark O'Connor