How do I solve Multiple artifacts of the module X are retrieved to the same file in Apache Ivy?

14,529

You have to expand your pattern to include the type, so that each artifact gets it's own local file:

<ivy:retrieve pattern="lib/[conf]/[artifact]-[type]-[revision].[ext]" />

Or if you don't need the sources and the javadoc you can change the dependency to:

<ivy-module version="2.0">
    <info organisation="org.apache" module="hello-ivy"/>
    <dependencies>
        <dependency org="commons-lang" name="commons-lang" rev="2.1" conf="default->master"/>
    </dependencies>
</ivy-module>

Which will only retrieve the master-conf(jar) of the dependency.

Share:
14,529

Related videos on Youtube

Jaanus
Author by

Jaanus

Doing C#, Java 50-50. SOreadytohelp

Updated on July 08, 2022

Comments

  • Jaanus
    Jaanus almost 2 years

    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" description="Download Ivy">
            <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" description="Initialize 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="update" depends="init-ivy" description="Download project dependencies">
            <!-- edited for brevity -->
    
            <ivy:retrieve pattern="lib/[conf]/[artifact]-[revision].[ext]" />
            <!-- edited for brevity -->
        </target>
    
    
        <target name="clean-all" depends="clean" description="Purge ivy cache">
            <ivy:cleancache/>
        </target>
    
    <!-- Ivy settings end-->
    

    This is my ivy.xml:

    <ivy-module version="2.0">
        <info organisation="org.apache" module="hello-ivy"/>
        <dependencies>
            <dependency org="commons-lang" name="commons-lang" rev="2.1"/>
        </dependencies>
    </ivy-module>
    

    This is my log:

    Buildfile: C:\Users\Jansu\workspace\HelloWorld\build.xml
    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:
    update:
    [ivy:retrieve] :: Ivy 2.2.0 - 20100923230623 :: http://ant.apache.org/ivy/ ::
    [ivy:retrieve] :: loading settings :: url = jar:file:/C:/Users/Jansu/.ant/lib/ivy-2.2.0.jar!/org/apache/ivy/core/settings/ivysettings.xml
    [ivy:retrieve] :: resolving dependencies :: org.apache#hello-ivy;working@Jansu-PC
    [ivy:retrieve]  confs: [default]
    [ivy:retrieve]  found commons-lang#commons-lang;2.1 in public
    [ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-lang/commons-lang/2.1/commons-lang-2.1.jar ...
    [ivy:retrieve] ................................................................................................................................................................................................................................................................................................................................................................................................................. (202kB)
    [ivy:retrieve] .. (0kB)
    [ivy:retrieve]  [SUCCESSFUL ] commons-lang#commons-lang;2.1!commons-lang.jar (1704ms)
    [ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-lang/commons-lang/2.1/commons-lang-2.1-sources.jar ...
    [ivy:retrieve] ........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................ (255kB)
    [ivy:retrieve] .. (0kB)
    [ivy:retrieve]  [SUCCESSFUL ] commons-lang#commons-lang;2.1!commons-lang.jar(source) (1819ms)
    [ivy:retrieve] downloading http://repo1.maven.org/maven2/commons-lang/commons-lang/2.1/commons-lang-2.1-javadoc.jar ...
    [ivy:retrieve] .........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
    [ivy:retrieve] ................................................................................................................................................................................................................................................................ (518kB)
    [ivy:retrieve] .. (0kB)
    [ivy:retrieve]  [SUCCESSFUL ] commons-lang#commons-lang;2.1!commons-lang.jar(javadoc) (2817ms)
    [ivy:retrieve] :: resolution report :: resolve 2094ms :: artifacts dl 6357ms
        ---------------------------------------------------------------------
        |                  |            modules            ||   artifacts   |
        |       conf       | number| search|dwnlded|evicted|| number|dwnlded|
        ---------------------------------------------------------------------
        |      default     |   1   |   1   |   1   |   0   ||   3   |   3   |
        ---------------------------------------------------------------------
    [ivy:retrieve] :: retrieving :: org.apache#hello-ivy
    [ivy:retrieve]  confs: [default]
    

    This is the error:

    BUILD FAILED
        C:\Users\Jansu\workspace\HelloWorld\build.xml:177: impossible to ivy retrieve: java.lang.RuntimeException: problem during retrieve of org.apache#hello-ivy: java.lang.RuntimeException: Multiple artifacts of the module commons-lang#commons-lang;2.1 are retrieved to the same file! Update the retrieve pattern  to fix this error.
    
        Total time: 11 seconds
    

    It seems that error comes from this pattern? :

    <ivy:retrieve pattern="lib/[conf]/[artifact]-[revision].[ext]" />
    

    But it looks solid to me.

    Any suggestions?

  • Jaanus
    Jaanus over 12 years
    i got this [ivy:retrieve] Problem occurred while parsing ivy file: Cannot add dependency 'commons-lang#commons-lang;2.1' to configuration 'master' of module org.apache#hello-ivy;working@Jansu-PC because this configuration doesn't exist! in file:/C:/Users/Jansu/workspace/HelloWorld/ivy.xml BUILD FAILED
  • Jaanus
    Jaanus over 12 years
    It worked now, thanks, but how do you know what to write behind conf=. And is this all I need to know about ivy? Now I just write new dependancies here and it downloads them all. Why is this better than just downloading these manually`without ivy? Just because, it saves some seconds or...?
  • Tomato
    Tomato about 11 years
    "Saves some seconds"? "How about saves some hours"? I've spent days, pre Ivy/Maven, iteratively discovering and downloading layer after layer of dependencies.