Search code examples
maven-2artifactoryivy

Use public maven repository with ivy


I have an ivy.xml containing

<dependencies>
  <dependency org="commons-lang" name="commons-lang" rev="2.4"/>
  <dependency org="foo-bar" name="superwidgets" rev="1.5"/>
</dependencies>

The whole superwidget stuff is hosted in a maven repository at http://example.com/m2/. The ivy documentation mentions resolvers, but it seems to assume an ivy repository. How can I add a single unofficial maven repository to my ivy settings to be used only by a single module? (Or put another way, what corresponds to maven's <repository> tag in ivy?) Nothing fancy, so I'd expect a one-liner in my ivy.xml.


Solution

  • You need to add an ivysettings.xml file with the following repositories listed (resolvers in ivy speak)

    <ivysettings>
        <settings defaultResolver="chain"/>
        <resolvers>
            <chain name="chain">
                <ibiblio name="central" m2compatible="true"/>
                <ibiblio name="example" m2compatible="true" root="http://example.com/m2/"/>
            </chain>
        </resolvers>
    </ivysettings>
    

    In my opinion it makes more sense to separate the dependency declaration (ivy.xml) from the mechanism of retrieval (settings.xml). This is not needed in Maven because it only supports one type of repository.

    If you want to get really fancy you can control which respository serves up a particular module:

    <ivysettings>
        <settings defaultResolver="central"/>
        <resolvers>
            <ibiblio name="central" m2compatible="true"/>
            <ibiblio name="example" m2compatible="true" root="http://example.com/m2/"/>
        </resolvers>
        <modules>
            <module organisation="foo-bar" name="superwidgets" resolver="example"/>
        </modules>
    </ivysettings>