web-dev-qa-db-fra.com

Utilisez le référentiel public maven avec ivy

J'ai un ivy.xml contenant

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

L'ensemble du contenu des superwidget est hébergé dans un référentiel Maven à http://example.com/m2/ . La documentation de ivy mentionne les résolveurs , mais elle semble supposer un référentiel de lierre. Comment puis-je ajouter un seul référentiel Maven non officiel à mes paramètres ivy pour n'être utilisé que par un seul module? (Ou en d'autres termes, qu'est-ce qui correspond au tag <repository> de maven dans ivy?) Rien de spécial, je m'attendrais donc à une ligne dans mon ivy.xml.

36
Adam Schmideg

Vous devez ajouter un fichier ivysettings.xml avec les référentiels suivants répertoriés ( resolvers in 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>

À mon avis, il est plus logique de séparer la déclaration de dépendance (ivy.xml) du mécanisme de récupération (settings.xml). Cela n’est pas nécessaire dans Maven car il ne prend en charge qu’un seul type de référentiel.

Si vous voulez vraiment avoir de la fantaisie, vous pouvez contrôler quel référentiel sert un module particulier:

<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>
45
Mark O'Connor

Je préfère les résolveurs chaînés incluant EBR et Maven Central de SpringSource, comme ceci:

<ivysettings>
    <settings defaultResolver="spring-chain" />
    <resolvers>
        <chain name="spring-chain">
            <url name="com.springsource.repository.bundles.release">
                <ivy pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
                <artifact pattern="http://repository.springsource.com/ivy/bundles/release/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
            </url>
            <url name="com.springsource.repository.bundles.external">
                <ivy pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
                <artifact pattern="http://repository.springsource.com/ivy/bundles/external/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]" />
            </url>
            <ibiblio name="ibiblio" m2compatible="true"/>
        </chain>
    </resolvers>
</ivysettings>

Bien que je ne les utilise pas directement, je préfère créer et contrôler mon propre référentiel Ivy local .

7
István

En voici un qui tente de conserver le comportement par défaut d'Ivy et d'ajouter simplement un référentiel, le référentiel maven.tmatesoft.com

<ivysettings>
    <settings defaultResolver="default"/>

    <!-- These "magic lines" are pulled from: https://ant.Apache.org/ivy/history/latest-milestone/tutorial/defaultconf.html -->
    <include url="${ivy.default.settings.dir}/ivysettings-public.xml"/>
    <include url="${ivy.default.settings.dir}/ivysettings-shared.xml"/>
    <include url="${ivy.default.settings.dir}/ivysettings-local.xml"/>
    <include url="${ivy.default.settings.dir}/ivysettings-main-chain.xml"/>
    <include url="${ivy.default.settings.dir}/ivysettings-default-chain.xml"/>
    <resolvers>
        <!-- Custom Repos here -->
        <ibiblio name="tmatesoft" m2compatible="true" root="https://maven.tmatesoft.com/content/repositories/releases/"/>
        <!--<filesystem name="internal">-->
            <!--<ivy pattern="${repository.dir}/[module]/ivy-[revision].xml"/>-->
            <!--<artifact pattern="${repository.dir}/[module]/[artifact]-[revision].[ext]"/>-->
        <!--</filesystem>-->
    </resolvers>
    <chain name="default" returnFirst="true" checkmodified="true" changingPattern=".*SNAPSHOT">
        <!-- These two are magic lines from the default conf -->
        <resolver ref="local"/>
        <resolver ref="main" />

        <!-- Custom Repos here -->
        <resolver ref="tmatesoft" />
    </chain>
    <modules>
        <module organisation="org.tmatesoft.hg4j" name=".*" resolver="tmatesoft"/>
    </modules>
</ivysettings>
0
Jonathan