How to dowload multiple Maven dependencies in Ivy with different classifiers?

点点圈 提交于 2019-12-02 02:45:15

问题


I am trying to depend on Neo4j server jar and Neo4j server jar - static-web.jar in Ivy. I am trying something like

<ivy-module version="2.0" xmlns:m="http://ant.apache.org/ivy/maven">
<info organisation="org.jimwebber" module="neo4j-koans"/>
<dependencies>
    <dependency org="org.springframework.data" name="spring-data-neo4j" rev="1.0.0.RELEASE">
        <exclude module="jms"/>
        <exclude module="jmxtools"/>
        <exclude module="jmxri"/>
        <exclude org="org.slf4j" name="slf4j-log4j12"/>
    </dependency>
    <dependency org="org.aspectj" name="aspectjrt" rev="1.6.11.RELEASE"/>
    <dependency org="org.aspectj" name="aspectjtools" rev="1.6.11.RELEASE"/>
    <dependency org="org.neo4j.app" name="neo4j-server" rev="1.5-SNAPSHOT" m:classifier="static-web"/>
    <dependency org="org.neo4j.app" name="neo4j-server" rev="1.5-SNAPSHOT"/>
    <dependency org="org.neo4j" name="neo4j-community" rev="1.5-SNAPSHOT"/>
    <dependency org="org.neo4j" name="neo4j-shell" rev="1.5-SNAPSHOT"/>
    <dependency org="org.codehaus.jackson" name="jackson-core-asl" rev="1.7.5"/>
    <dependency org="org.codehaus.jackson" name="jackson-mapper-asl" rev="1.7.5"/>
    <dependency org="com.sun.jersey" name="jersey-client" rev="1.3"/>
    <dependency org="org.mockito" name="mockito-all" rev="1.8.5"/>
    <dependency org="junit" name="junit" rev="4.7"/>        
</dependencies>
</ivy-module>

But I never get the "staic-web".jar down, and now error either. Anyone knows how to do this?

Thanks for any hints!

/peter


回答1:


This is how you retrieve more than one artifact associated with a Maven module:

<dependency org="org.neo4j.app" name="neo4j-server" rev="1.5-SNAPSHOT">
    <artifact name="neo4j-server" type="jar" />
    <artifact name="neo4j-server" type="jar" m:classifier="static-web"/>
</dependency>

The syntax is odd because of the way Maven references additional artifacts using classifiers.

The neo4j snapshot repository needs to be added into your ivysettings.xml file (snapshot releases are not published to Maven Central)

<ivysettings>
    <settings defaultResolver="chain"/>
    <resolvers>
        <chain name="chain">
            <ibiblio name="central" m2compatible="true"/>
            <ibiblio name="neo4j-snapshot" m2compatible="true" root="http://repo.neo4j.org/content/repositories/snapshots"/>
        </chain>
    </resolvers>
</ivysettings>

Other issues

Version corrections

<dependency org="org.aspectj" name="aspectjrt" rev="1.6.11"/>
<dependency org="org.aspectj" name="aspectjtools" rev="1.6.11"/>

Broken repository POM

The problem with using snapshot repos is sometimes the POMs are broken. Ivy is unable to process the following file:

http://repo.neo4j.org/content/repositories/snapshots/org/neo4j/app/neo4j-server/1.5-SNAPSHOT/neo4j-server-1.5-SNAPSHOT.pom

This prevents ivy from downloading the neo4j-server arifacts....

[ivy:retrieve] :::: WARNINGS
[ivy:retrieve]  io problem while parsing ivy file: http://repo.neo4j.org/content/repositories/snapshots/org/neo4j/app/neo4j-server/1.5-SNAPSHOT/neo4j-server-1.5-SNAPSHOT.pom: Impossible to load parent for file:/home/mark/.ivy2/cache/org.neo4j.app/neo4j-server/ivy-1.5-SNAPSHOT.xml.original. Parent=org.neo4j.build#parent-pom;25
[ivy:retrieve]      module not found: org.neo4j.app#neo4j-server;1.5-SNAPSHOT
..
[ivy:retrieve]      ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]      ::          UNRESOLVED DEPENDENCIES         ::
[ivy:retrieve]      ::::::::::::::::::::::::::::::::::::::::::::::
[ivy:retrieve]      :: org.neo4j.app#neo4j-server;1.5-SNAPSHOT: not found
[ivy:retrieve]      ::::::::::::::::::::::::::::::::::::::::::::::

Work-around

In the settings file configure ivy to retrieve the artifacts directly using the url resolver. The ibiblio resolver is used for all other modules whose POMs are valid.

<ivysettings>
    <settings defaultResolver="chain"/>
    <resolvers>
        <chain name="chain">
            <ibiblio name="central" m2compatible="true"/>
            <ibiblio name="neo4j-snapshot" m2compatible="true" root="http://repo.neo4j.org/content/repositories/snapshots"/>
        </chain>
        <url name="neo4j-snapshot-hack">
              <artifact pattern="http://repo.neo4j.org/content/repositories/snapshots/[organisation]/[module]/[revision]/[artifact]-[revision](-[classifier]).[ext]"/>
        </url>
    </resolvers>
    <modules>
        <module organisation="org.neo4j.app" name="neo4j-server" resolver="neo4j-snapshot-hack"/>
    </modules>
</ivysettings>

This will mean transitive dependencies in the by-passed POM file might be skipped. Can't be helped if the POM is not working properly



来源:https://stackoverflow.com/questions/7804253/how-to-dowload-multiple-maven-dependencies-in-ivy-with-different-classifiers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!