Was ist die Datei Mirror in Maven settings.xml?

9

Korrigiere mich, wenn ich falsch liege, aber ein Mirror wird verwendet, um den gesamten Verkehr auf eine bestimmte Repository-URL umzuleiten und alles andere zu blockieren (einschließlich Maven Central Repo).

Was passiert nun, wenn ich eine Spiegelung auf http://a.com:8081 und ein Repository auf http://b.com:8081 habe? Würde die zweite URL jemals verwendet werden? Ich nehme an, die Antwort ist eine Nein. Können Sie mehrere Spiegel haben?

    
Dark Night 21.04.2016, 01:16
quelle

1 Antwort

9
  

Korrigiere mich, wenn ich falsch liege, aber ein Mirror wird verwendet, um den gesamten Verkehr auf eine bestimmte Repository-URL umzuleiten und alles andere zu blockieren (einschließlich Maven Central Repo).

Das ist nicht ganz richtig. Artefakte werden von Maven heruntergeladen, indem sie in definierten Repositories durchsucht werden. Diese Repositories sind im Projekt-POM oder in den Maven-Einstellungen definiert. Aber wie in der Mirror-Dokumentation angegeben:

  

Sie können jedoch eine alternative Spiegelung für ein bestimmtes Repository verwenden, ohne die Projektdateien zu ändern.

Nehmen wir das Beispiel aus der Dokumentation und kommentieren Sie es:

%Vor%

Dies definiert einen einzelnen Spiegel, der verwendet wird, wenn Maven eine Abhängigkeit von Maven Central holen möchte. Angenommen, Sie haben 2 aktuelle Repositorys, bei denen es sich um Maven Central und ein benutzerdefiniertes Repo A handelt. Was passiert, ist Folgendes:

  1. Sie erklären eine Abhängigkeit von einem Artefakt;
  2. Maven wird diese Abhängigkeit innerhalb Ihrer definierten Repositories suchen, so dass er im Repository A und Maven Central danach suchen wird;
  3. Sagen wir, es beginnt mit A: Es wird die für dieses Repository definierte URL treffen, wie Sie es erwarten würden. Dann sagen wir, dass es dort nicht gefunden wurde;
  4. Dann wird es in Maven Central aussehen. Maven wird jedoch feststellen, dass ein Spiegel für dieses Repository konfiguriert wurde. Es wird nicht Maven Central bei repo1.maven.org treffen. Stattdessen wird es von uk.maven.org abgerufen, was die URL ist, die im Spiegelkonfigurationselement definiert ist.

Wie dieses Beispiel zeigt, gilt eine Spiegelung nur für bestimmte Repositories, die mit dem Konfigurationselement <mirrorOf> definiert sind. Im vorherigen Fall hatten wir <mirrorOf>central</mirrorOf> , was "Mirror Maven Central" bedeutet. Dieses Element kann verschiedene Werte haben und die Dokumentation gibt Beispiele :

  

Beispiele:

     
  • * = alles
  •   
  • external:* = Alles nicht auf dem lokalen Host und nicht dateibasiert.
  •   
  • repo,repo1 = Repo oder Repo1
  •   
  • *,!repo1 = alles außer repo1:
  •   
  

Was passiert nun, wenn ich eine Spiegelung auf http://a.com:8081 und ein Repository auf http://b.com:8081 habe? Würde die zweite URL jemals verwendet werden? Ich nehme an, die Antwort ist ein Nein.

Das obige zeigt, dass die Antwort nicht streng nein ist. Die Spiegelung auf http://a.com:8081 wird verwendet, wenn Maven versucht, eine Abhängigkeit von einem der Repositories, die es spiegelt, zu holen. Wenn es das Repository tatsächlich auf http://b.com:8081 spiegelt, werden niemals Anfragen an http://b.com:8081 gesendet (sie werden zu http://a.com:8081 umgeleitet); aber wenn nicht, wird Maven weiterhin Abhängigkeiten von http://b.com:8081 wie üblich holen.

  

Können Sie mehrere Spiegel haben?

Ja, können Sie.

    
Tunaki 21.04.2016 08:10
quelle

Tags und Links