8 Stimmen

Unter Verwendung mehrerer Repositories in Maven

Ich habe ein Projekt, das ein internes Repository und das zentrale Repository verwendet. Gibt es eine Möglichkeit, die settings.xml so zu konfigurieren, dass ich beide anstelle von nur einem verwenden kann? Als ich das

        MEINE ID
        MEINE URL
        *

in der settings.xml hinzufügte, konnte ich in mein internes Repository schauen, jedoch überschrieb es das zentrale Repository.

Ich bin sicher, dass dies ein häufig auftretendes Problem für Maven-Neulinge ist.

8voto

parsifal Punkte 216

Es gibt einige Möglichkeiten, dies zu tun.

Das Beste, meiner Meinung nach, ist, dass Ihr lokaler Repositorieserver als Proxy für Maven Central fungiert. Sowohl Nexus als auch Artifactory machen dies von Haus aus. Wenn Sie Apache oder einen anderen Webserver verwenden, sollten Sie umschalten.

Sie können auch Ihre Einstellungen aktualisieren, um den Zielserver von Ihrem Spiegel auszuschließen:

*,!MyOtherRepository

Dies funktioniert, wenn Sie mehrere lokale Repositorieserver haben, aber ich glaube nicht, dass Sie auf diese Weise central ausschließen können: Standardmäßig sucht Maven nach Artefakten in central, und Ihr Server fungiert als Ersatz dafür.

Das verbleibt mit expliziten Repositoryeinträgen in Ihren POMS, die auf das lokale Repository verweisen. Wenn Ihr lokales Repository nur Ihre Artefakte bedient, könnte dies die zweit einfachste Sache sein, die Sie tun können (besonders wenn Sie ein übergeordnetes POM verwenden, das die Repositoriespezifikation enthält).

4voto

Brian Agnew Punkte 260470

Deine Mirror-Direktive spiegelt derzeit alles. Du kannst benannte Repositories ausschließen, wie folgt:

!myExcludedRepo,*

Das obige spiegelt alles außer dem Repository namens myExcludedRepo.

Hier ist der Maven-Leitfaden zum Spiegeln. Beachte besonders den Abschnitt mit der Bezeichnung Fortgeschritten. Es gibt dort viele Möglichkeiten.

0voto

Some Newbie Punkte 1049

Ich habe eine funktionierende Antwort gefunden, indem ich stattdessen die pom.xml ändere und Remote-Repositorys, wie von diesem Link angeleitet, hinzufüge.

Vielen Dank für die Antworten, Leute, und ich gehe davon aus, dass Ihre Vorschläge nützlich sein können für kompliziertere Szenarien mit mehreren Repositories und komplexen Konfigurationen.

0voto

user1050755 Punkte 10123

Ich verwende drei Repositories (unter Verwendung von Nexus), das erste ist ein Proxy-Repository, zu dem ich alle externen Repositories hinzufüge. Die anderen zwei sind meine internen Repositories für die Bereitstellung von Versionen und Snapshots. Hier ist meine .m2/settings.xml:

    true
    false

        nexus
        external:*
        http://localhost:3129/nexus/content/groups/public

        nexus

                central
                http://central

                    true

                    true

                internal.releases
                http://localhost:3129/nexus/content/repositories/releases

                    true

                    false

                internal.snapshots
                http://localhost:3129/nexus/content/repositories/snapshots

                    false

                    true

                central
                http://central

                    true

                    true

            true
            true           

    nexus

        internal.releases
        admin
        XXX

        internal.snapshots
        admin
        XXX

Maven verwendet alle, daher möchten Sie vielleicht die Routing-Funktion von Nexus verwenden, um "^/my/private/packages/.*" zu blockieren, damit es nicht versucht, interne Pakete von externen Repositories abzurufen. Ich habe die internen Repositories nicht dem Proxy-Repo hinzugefügt.

Sie müssen Ihre pom.xml-Dateien nicht anpassen, damit dies funktioniert. Geben Sie einfach "mvn deploy" ein.

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