2016-04-21 6 views
8

Correggetemi se ho torto, ma un Mirror è usato per reindirizzare tutto il traffico verso un URL specifico del repository e bloccare tutto il resto (incluso il repository centrale di Maven).Che cos'è Mirror nel file settings.xml di Maven?

Ora cosa succede se ho un mirror su http://a.com:8081 e un repository su http://b.com:8081. Il secondo URL sarebbe mai stato utilizzato? Presumo che la risposta sia un numero. Puoi avere più specchi?

risposta

9

Correggetemi se ho torto, ma un Mirror viene utilizzato per reindirizzare tutto il traffico verso un URL specifico del repository e bloccare tutto il resto (incluso il repository centrale di Maven).

Questo non è del tutto corretto. Gli artefatti vengono scaricati da Maven cercandoli all'interno definito repositories. Questi repository sono definiti nel POM del progetto o nelle impostazioni Maven. Ma, come specificato nello Mirror documentation:

Tuttavia, è possibile utilizzare un mirror alternativo per un determinato repository senza modificare i file di progetto.

Prendiamo l'esempio dalla documentazione e commentarlo:

<mirrors> 
    <mirror> 
    <id>UK</id> 
    <name>UK Central</name> 
    <url>http://uk.maven.org/maven2</url> 
    <mirrorOf>central</mirrorOf> 
    </mirror> 
</mirrors> 

Questo definisce un unico specchio che sarà utilizzato durante Maven vorrà prendere una dipendenza da Maven centrale. Diciamo che avete 2 depositi attuali, che sono Maven centrale e un repo personalizzato A. Quello che succede è il seguente:

  1. si dichiara una dipendenza ad un artefatto;
  2. Maven cercherà quella dipendenza all'interno dei repository definiti, quindi cercherà all'interno del repository A e Maven Central;
  3. Diciamo che inizia con A: colpirà l'URL definito per quel repository, come ci si aspetterebbe. Quindi diciamo che non è stato trovato lì;
  4. Quindi guarderà all'interno di Maven Central. Tuttavia, Maven noterà che un mirror è stato configurato per quel repository. Non colpirà Maven Central al numero repo1.maven.org. Invece, lo prenderà da uk.maven.org, che è l'URL definito nell'elemento di configurazione del mirror.

Come illustrato in questo esempio, un mirror si applica solo a determinati archivi, definiti con l'elemento di configurazione <mirrorOf>. Nel caso precedente, avevamo <mirrorOf>central</mirrorOf> che significa "Mirror Maven Central". Questo elemento can have various values, e la documentazione gives examples:

Esempi:

  • * = tutto
  • external:* = tutto non sul localhost e non file basato.
  • repo,repo1 = repo o repo1
  • *,!repo1 = tutto, tranne repo1:

Ora che cosa se ho uno specchio per http://a.com:8081 e un repository per http://b.com:8081. Il secondo URL sarebbe mai stato utilizzato? Presumo che la risposta sia un n.

Quanto sopra indica che la risposta non è strettamente n. Il mirror su http://a.com:8081 verrà utilizzato quando Maven tenterà di recuperare una dipendenza da uno dei repository che esegue il mirroring. Se in effetti rispecchia il repository su http://b.com:8081, non verranno mai inviate richieste a http://b.com:8081 (verranno reindirizzate a http://a.com:8081); ma se così non fosse, Maven continuerà a recuperare le dipendenze dallo http://b.com:8081 come al solito.


Potete avere più specchi?

Sì, è possibile.