39 Stimmen

Öffentliches Maven-Repository mit Ivy verwenden

Ich habe eine ivy.xml mit

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

Der ganze Superwidget-Kram wird in einem Maven-Repository gehostet unter http://example.com/m2/ . Die Efeu-Dokumentation erwähnt Resolver aber es scheint von einem Efeu-Repository auszugehen. Wie kann ich ein einzelnes inoffizielles Maven-Repository zu meinen Ivy-Einstellungen hinzufügen, das nur von einem einzigen Modul verwendet wird? (Oder anders ausgedrückt, was entspricht dem maven's <repository> Tag im Efeu?) Nichts Ausgefallenes, also würde ich einen Einzeiler in meiner ivy.xml erwarten.

52voto

Mark O'Connor Punkte 74233

Sie müssen eine ivysettings.xml Datei, in der die folgenden Repositories aufgeführt sind ( Resolver in Efeusprache)

<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>

Meiner Meinung nach ist es sinnvoller, die Deklaration der Abhängigkeiten (ivy.xml) vom Mechanismus des Abrufs (settings.xml) zu trennen. Dies ist in Maven nicht notwendig, da es nur eine Art von Repository unterstützt.

Wenn Sie es ganz genau wissen wollen, können Sie steuern, welcher Speicherort ein bestimmtes Modul bereitstellt:

<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>

7voto

István Punkte 517

Ich bevorzuge verkettete Resolver, die auch SpringSource's EBR und Maven Central einschließen, wie diesen:

<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>

Obwohl ich sie nicht direkt verwende, ziehe ich es vor mein eigenes lokales Ivy-Repository erstellen und kontrollieren .

0voto

Jonathan Punkte 5990

Hier ist einer, der versucht, Ivys Standardverhalten beizubehalten und einfach ein Repository hinzuzufügen, das maven.tmatesoft.com Repo

<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>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X