2010-05-05 16 views
7

C'è un modo per dire Maven (quando fare pacchetto mvn, sito mvn o ...), non per risolvere le dipendenze dal repository locale?Come prevenire Maven per risolvere le dipendenze nel repository locale

Sfondo di questa domanda: A volte mi trovo in problemi, quando le dipendenze precedentemente memorizzate nella cache (ad esempio SomeProject-0,7-alfa) non sono più disponibili nel repository remoto. Nella mia build locale, tutto funziona ancora correttamente, in quanto la dipendenza è stata memorizzata nella cache in precedenza. Non appena condivido il mio pom con gli altri, possono mettersi nei guai, dato che non hanno una versione cache di quella dipendenza e la dipendenza non può più essere risolta dal repository remoto.

Qualsiasi aiuto sarà apprezzato. Grazie in anticipo!

+0

Perché la dipendenza non è più disponibile nel repository remoto? Se c'è una versione più recente, perché non aggiornarla semplicemente? Se la nuova versione non è retrocompatibile, perché rimuovere il vecchio? –

+0

Il problema sta rilevando il fatto che la vecchia versione non è più disponibile. Non riesco a controllare tutte le dipendenze manualmente e poiché sto avendo la versione locale memorizzata nella cache del maven di dipendenza non più disponibile non dirmi che c'è un problema. –

+0

Capisco il tuo problema diretto; tuttavia, ho provato a notare con le mie domande che IMHO potrebbe esserci un problema di processo. E in questo caso è probabilmente meglio risolvere la causa principale piuttosto che cercare una soluzione alternativa. –

risposta

12

C'è un modo per dire a maven (quando si esegue il pacchetto mvn, sito mvn o ...) di non risolvere le dipendenze dal repository locale?

No, è così che funziona l'intera risoluzione delle dipendenze (tramite il repository locale).

A volte ho problemi, quando le dipendenze precedentemente memorizzate nella cache (ad esempio SomeProject-0.7-ALPHA) non sono più disponibili nel repository remoto.

Ci scusiamo per l'ovvio ma rimuovere le dipendenze da un repository remoto è una pratica orribile e porta a ... beh il tipo di problemi che stai affrontando. Se possibile, evita di farlo.

Appena condivido il mio pom con gli altri, si può entrare in difficoltà, in quanto non hanno una versione cache di che la dipendenza e la dipendenza non possono più essere risolti dal repository remoto.

Un modo per controllare che le cose avrebbero funzionato per gli altri sarebbe quella di spurgo le dipendenze del progetto che si vuole condividere dal vostro repository locale e di ri-risolvono. Naturalmente, farlo manualmente sarebbe davvero doloroso, ma la buona notizia è che lo Maven Dependency Plugin ha un obiettivo purge-local-repository.

mvn org.apache.maven.plugins:maven-dependency-plugin:2.1:purge-local-repository \ 
    -DreResolve=true \ 
    -DactTransitively=true \ 
    -Dverbose=true 

Se questo non funziona, poi si sa che manca qualcosa e non può essere risolto più che è fondamentalmente ciò che si vuole sapere. Ma lo hai anche perso, quindi fai un backup del tuo repository se questo è importante per te.

+0

Accettato, come repository di purge-local è la cosa che stavo cercando. Spero di non averne più bisogno in futuro. Grazie! –

+0

@Nils Prego. Sentiti libero di [upvote troppo] (http://meta.stackexchange.com/questions/686/accepting-answer-without-upvoting) se pensi che abbia senso per questa risposta accettata :) –

+0

come fare per i plugin il progetto stava usando. C'è una purga per i plugin? purge-local-repository cancella le dipendenze, non i plugin .. –

2

Il test di base di una build di maven consiste nell'eliminare il repository locale .m2/repository e provare a creare (pacchetto mvn) e vedere se funziona. Se non hai altri problemi qui. Come accennato, il problema sembra essere il processo con cui stai lavorando. Se una dipendenza non è più disponibile da un repository remoto, c'è un altro problema. Stai usando un repository manager come Nexus, Archiva, Artifactory?

+0

Stavo pensando di eliminare/spostare l'intero repository locale, in effetti è quello che ho fatto in alcuni casi, ma non è così ottimale. Non sto utilizzando un gestore di repository. I repository che sto usando non sono sotto il mio controllo. Prenderò il tuo contributo e le cose sui miei processi prima di tutto. Ho pensato che potesse esserci una bandiera per spegnere il repository locale, ma vedo che questa sarebbe solo una soluzione ... Grazie per il tuo aiuto! –

+1

Nessun flag per disattivare l'utilizzo del repository locale. Se non si sta utilizzando personalmente un Repo Manager, è necessario pensare di installarlo in azienda. L'unica cosa che puoi fare con il tuo repository locale è cambiare la posizione, ma il gioco è fatto. – khmarbaise

+0

+1 per il suggerimento di creare un repository di società/progetto - Stavo per suggerire lo stesso :-) –

Problemi correlati