In Maven 2, è possibile specificare un mirror per tutto, ma consentire il failover ai repository diretti?

StackOverflow https://stackoverflow.com/questions/2471031

  •  20-09-2019
  •  | 
  •  

Domanda

Capisco che parte del fascino di impostare un mirror Maven, come il seguente:

<mirror>
  <id>nexus</id>
  <name>Maven Repository</name>
  <mirrorOf>*</mirrorOf>
  <url>http://server:8081/nexus/content/groups/public</url>
</mirror>

...è quello il documentazione stati:

Puoi forzare Maven a utilizzare un singolo repository facendo in modo che rispecchi tutte le richieste del repository.

Tuttavia, questo è anche un'indicazione che avendo a * specchio impostare ogni postazione di lavoro dovere essere costretto a passare attraverso lo specchio?

Lo chiedo perché vorrei che ogni workstation eseguisse il failover e si connettesse direttamente a qualsiasi repository pubblico di cui sia a conoscenza nel caso in cui Nexus non riesca a risolvere una dipendenza o un plug-in.(In un mondo perfetto, ogni sviluppatore ha l'accesso necessario per aggiungere ulteriori repository proxy secondo necessità.Tuttavia, a volte tale accesso non è disponibile;a volte il server Nexus non funziona;a volte subisce un errore heap Java.)

Questa configurazione di failover "mirroring ma vai avanti e connettiti direttamente ai repository pubblici" è possibile in Maven 2?Sarà in Maven 3?

È stato utile?

Soluzione

Non è possibile in Maven 2.Potrebbe essere possibile in futuro in Maven 3.Abbiamo anche considerato di aggiungere questa possibilità in Nexus agli artefatti proxy dinamicamente.La conclusione è che la maggior parte delle organizzazioni desidera il controllo sui repository proxy utilizzati dagli sviluppatori e quindi questa funzionalità risulta essere molto popolare in un gestore di repository.

Per lo stesso motivo, non è auspicabile che le macchine degli sviluppatori riescano direttamente ad accedere al gestore dei repository direttamente ai repository.Quindi finisci per perdere tutti i vantaggi che ottieni della memorizzazione nella cache, della condivisione, del filtraggio ecc. del proxy.

Altri suggerimenti

No, non esiste una modalità di failover.Puoi escludere alcuni repository dall'accesso al mirror <mirrorOf>*,!repository</mirrorOf>, oppure puoi averne due settings.xml file che si comporteranno diversamente e cambieranno utilizzo --settings se necessario.

Una risposta (implicita nella mia domanda) è che ciò non è possibile in base alla progettazione.Il commento alla fine di questo biglietto di Jason Van Zyl lo indica

Il vero specchio non viene controllato di proposito.Il modo in cui lavorano oggigiorno i gestori dei repository si romperebbe gravemente se iniziassimo a farlo.

Anche questa configurazione è possibile.Funziona alla grande, però c'è una situazione difficile, se il progetto è gerarchicamente grande e non tutti i bambini hanno lo stesso genitore, dovresti copiare questa sezione anche sui loro poms.Significa che ovunque tranne che nel progetto che dichiara questo falso centrale, ovvero il repository predefinito da esaminare, la tua richiesta andrà al corretto Maven Central o ad altri repository dichiarati nel pom.PRESA:usi il plugin X - e forse in realtà non ne sei consapevole - e il plugin X dipende dall'artefatto Y, che nel suo pom ha dichiarato il repository ....>>> nessun controllo sull'inoltro di tutte le richieste di dipendenze a nexus

Un'altra alternativa è avere un settings.xml aggiuntivo per i progetti e "fornirlo" $mvn -s settings.xml

La terza alternativa è avere global settings.xml come segue e attivare -P nexus solo quando necessario, perché senza un falso repository centrale funziona sorprendentemente.

<settings>
    <mirrors>
        <mirror>
            <id>nexus</id>
            <name>nexus</name>
            <url>http://localhost:8082/nexus-webapp-1.6.0/content/groups/public</url>
            <mirrorOf>*</mirrorOf>
        </mirror>
    </mirrors>

    <profiles>
        <profile>
            <id>nexus</id>

                <repositories>
                <repository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>central</id>
                    <url>http://central</url>
                    <releases>
                        <enabled>false</enabled>
                    </releases>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>  
        </profile>
    </profiles>
    <activeProfiles>

    </activeProfiles>
</settings>

Apri l'immagine in un'altra scheda/finestra.enter image description here

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top