2012-10-11 13 views
8

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 beides anstelle von nur einem verwenden kann? Wenn ich in settings.xmlVerwenden mehrerer Repositorys in Maven

hinzugefügt habe, kann ich in mein eigenes internes Repository schauen, aber es überschreibt das zentrale Repository.

Ich bin sicher, das ist ein häufig anzutreffendes Problem für Leute, die neu zu Maven sind.

Antwort

8

Es gibt einige Möglichkeiten, dies zu tun.

Das Beste, IMO, ist, dass Ihr lokaler Repository-Server als Proxy für Maven Central fungiert. Sowohl Nexus als auch Artifactory tun dies sofort. Wenn Sie Apache oder einen anderen Webserver verwenden, sollten Sie wechseln.

Sie können Ihre Einstellungen ausschließen den Zielserver aus dem Spiegel aktualisieren:

<mirrorOf>*,!MyOtherRepository</mirrorOf> 

Dies funktioniert, wenn Sie mehr lokalen Repository-Server, aber ich glaube nicht, Sie zentralen auf diese Weise ausgeschlossen werden können: Standardmäßig sucht Maven nach Artefakten in der Zentrale, und Ihr Server fungiert als Ersatz dafür.

Das hinterlässt explizite Repository-Einträge in Ihren POMS, die auf das lokale Repository verweisen. Wenn Ihr lokales Repository nur Ihre Artefakte versorgt, ist dies möglicherweise die zweit- einfachste Vorgehensweise (insbesondere, wenn Sie ein übergeordnetes POM verwenden, das die Repository-Spezifikation enthält).

+0

Nein, ich habe tatsächlich ein Remote-Repository, das die Artefakte anderer Leute bedient.Ich brauche die Einstellungen an t. maven prüft auf Ergebnisse von sowohl dem zentralen als auch dem entfernten Repository. –

+0

Der einfachste Weg, dies zu tun, ist ein lokaler Repository-Server, der als Proxy fungiert. Ich denke, Sie stecken fest mit expliziten '' Einträge in Ihrem (Eltern) POM. – parsifal

4

Ihre Spiegel-Direktive spiegelt derzeit alles. Sie können so genannt Repositories ausschließen:

<mirrorOf>!myExcludedRepo,*</mirrorOf> 

Die obige Spiegel alles außer dem Repository namens myExcludedRepo.

Hier ist die Maven guide for mirroring. Beachten Sie insbesondere den Abschnitt Advanced. Da gibt es viele Möglichkeiten.

0

fand ich eine Arbeits Antwort, die die pom.xml stattdessen zu ändern ist und Remote-Repositories on the fly hinzufügen, wie

von this link instruiert

Danke für die Antworten, Leute, und ich würde Ihre Vorschläge annehmen kann nützlich für komplexere Szenarien mit mehr Repositories und komplexen Konfigurationen.

+0

Nun, froh, dass Sie es gefunden haben, obwohl "Was explizite Repository-Einträge in Ihren POMs hinterlässt", schien mir ziemlich klar zu sein. – parsifal

+0

Fein. Ich werde Ihre Antwort dann akzeptieren :) (obwohl dieser Link dort die Low-Level-Lösung zur Verfügung stellte). –

0

Ich benutze drei Repos (mit Nexus), die erste ist ein Proxy-Repository, dem ich alle externen Repositories hinzufügen. Die anderen beiden sind meine internen Repositories für die Bereitstellung von Releases und Snapshots. Hier ist meine .m2/settings.xml:

<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"> 
    <!-- http://maven.apache.org/ref/3.0.4/maven-settings/settings.html --> 

    <interactiveMode>true</interactiveMode> 
    <offline>false</offline> 

    <mirrors> 
    <mirror> 
     <id>nexus</id> 
     <mirrorOf>external:*</mirrorOf> 
     <url>http://localhost:3129/nexus/content/groups/public</url> 
    </mirror> 
    </mirrors> 

    <profiles> 
    <profile> 
     <id>nexus</id> 
     <repositories> 
      <repository> 
       <id>central</id> 
       <url>http://central</url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
      </repository> 

      <repository> 
       <id>internal.releases</id> 
       <url>http://localhost:3129/nexus/content/repositories/releases</url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>false</enabled> 
       </snapshots> 
      </repository>   

      <repository> 
       <id>internal.snapshots</id> 
       <url>http://localhost:3129/nexus/content/repositories/snapshots</url> 
       <releases> 
        <enabled>false</enabled> 
       </releases> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
      </repository>   
     </repositories> 

     <pluginRepositories> 
      <pluginRepository> 
       <id>central</id> 
       <url>http://central</url> 
       <releases> 
        <enabled>true</enabled> 
       </releases> 
       <snapshots> 
        <enabled>true</enabled> 
       </snapshots> 
      </pluginRepository> 
     </pluginRepositories> 
     <properties> 
      <downloadSources>true</downloadSources> 
      <downloadJavadocs>true</downloadJavadocs>   
     </properties> 
    </profile> 
    </profiles> 

    <activeProfiles> 
    <activeProfile>nexus</activeProfile> 
    </activeProfiles> 

    <servers> 
    <server> 
     <id>internal.releases</id> 
     <username>admin</username> 
     <password>XXX</password> 
    </server> 
    <server> 
     <id>internal.snapshots</id> 
     <username>admin</username> 
     <password>XXX</password> 
    </server> 
    </servers> 

</settings> 

Maven nutzt sie alle, so dass Sie die Routing-Funktion von Nexus zu blockieren "^/my/private/packages /.*" verwenden möchte, so tut es Versuchen Sie nicht, interne Pakete von externen Repositories zu holen. Ich habe die internen Repos nicht zum Proxy-Repo hinzugefügt.

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

Verwandte Themen