简体   繁体   中英

Java, using Ant with Apache Ivy problems

I was using ANT to deploy my stuff to Tomcat. But I had trouble with missing dependencies and I wanted to add Ivy, cause it was reccomended.

Now I added this to my build.xml file:

<!-- Ivy settings start-->

    <condition property="ivy.home" value="${env.IVY_HOME}">
        <isset property="env.IVY_HOME" />
    </condition>


    <target name="download-ivy" unless="offline">
        <mkdir dir="${ivy.jar.dir}"/>
            <!-- download Ivy from web site so that it can be used even without any special installation -->
        <get src="http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.install.version}/ivy-${ivy.install.version}.jar" 
            dest="${ivy.jar.file}" usetimestamp="true"/>
    </target>


    <target name="init-ivy" depends="download-ivy">
        <!-- try to load ivy here from ivy home, in case the user has not already dropped
        it into ant's lib dir (note that the latter copy will always take precedence).
        We will not fail as long as local lib dir exists (it may be empty) and
        ivy is in at least one of ant's lib dir or the local lib dir. -->
        <path id="ivy.lib.path">
            <fileset dir="${ivy.jar.dir}" includes="*.jar"/>
        </path>
        <taskdef resource="org/apache/ivy/ant/antlib.xml"
        uri="antlib:org.apache.ivy.ant" classpathref="ivy.lib.path"/>
    </target>

    <target name="go" depends="init-ivy" description="--> resolve dependencies, compile and run the project">
    <echo message="using ivy to resolve commons-lang 2.1..."/>
    <!--
    here comes the magic line: asks ivy to resolve a dependency on commons-lang 2.1 and to build an ant path with it from its cache
    -->
    <ivy:cachepath organisation="commons-lang" module="commons-lang" revision="2.1" pathid="lib.path.id" inline="true"/>
    </target>
<!-- Ivy settings end-->

With this I am trying to add common-lang JAR file to my project. This is what I get as output:

    Buildfile: C:\Users\Jansu\workspace\HelloWorld\build.xml
build:
deploywar:
download-ivy:
      [get] Getting: http://repo2.maven.org/maven2/org/apache/ivy/ivy/2.2.0/ivy-2.2.0.jar
      [get] To: C:\Users\Jansu\.ant\lib\ivy-2.2.0.jar
      [get] Not modified - so not downloaded
init-ivy:
go:
     [echo] using ivy to resolve commons-lang 2.1...
[ivy:cachepath] :: Ivy 2.2.0 - 20100923230623 :: http://ant.apache.org/ivy/ ::
[ivy:cachepath] :: loading settings :: url = jar:file:/C:/Users/Jansu/.ant/lib/ivy-2.2.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
[ivy:cachepath] :: resolving dependencies :: commons-lang#commons-lang-caller;working
[ivy:cachepath]     confs: [default, master, compile, provided, runtime, system, sources, javadoc, optional]
[ivy:cachepath]     found commons-lang#commons-lang;2.1 in public
[ivy:cachepath] :: resolution report :: resolve 151ms :: artifacts dl 10ms
    ---------------------------------------------------------------------
    |                  |            modules            ||   artifacts   |
    |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
    ---------------------------------------------------------------------
    |      default     |   1   |   0   |   0   |   0   ||   1   |   0   |
    |      master      |   1   |   0   |   0   |   0   ||   1   |   0   |
    |      compile     |   1   |   0   |   0   |   0   ||   0   |   0   |
    |     provided     |   1   |   0   |   0   |   0   ||   0   |   0   |
    |      runtime     |   1   |   0   |   0   |   0   ||   0   |   0   |
    |      system      |   1   |   0   |   0   |   0   ||   0   |   0   |
    |      sources     |   1   |   0   |   0   |   0   ||   1   |   0   |
    |      javadoc     |   1   |   0   |   0   |   0   ||   1   |   0   |
    |     optional     |   1   |   0   |   0   |   0   ||   0   |   0   |
    ---------------------------------------------------------------------
BUILD SUCCESSFUL
Total time: 2 seconds

I guess it works.. now 2 questions:

1) where do those JAR files appear in my project?

2) how would I add other JAR files, such as Spring framework files?

This:

<ivy:cachepath organisation="commons-lang" module="commons-lang" revision="2.1" pathid="lib.path.id" inline="true"/>
</target>

is called an inline retrieval and tells Ivy to build an ant-path with pathid="lib.path.id" from the ivy cache the jars will not be copied to your project. The cache is in $ {user.home}/.ivy2.

If you want to download artifacts to your project you will have to use the retrieve task and define an ivy.xml for your project.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM