2010-04-06 22 views
11

Il mio modulo Maven A ha una dipendenza da un altro modulo Maven B fornito da altre persone. Quando eseguo "mvn install" sotto A per la prima volta, maven scarica B-1.0.jar da un repository remoto al mio repository maven locale. Il mio modulo A va benissimo.Come aggiornare il repository locale Maven con le risorse più recenti da un repository remoto?

Nel frattempo, altre persone stanno implementando il nuovo B-1.0.jar nel repository remoto. Quando eseguo "mvn install" sotto A, Maven non scarica il nuovo B-1.0.jar dall'archivio remoto al mio repository locale. Di conseguenza, la build del modulo A non riesce a causa delle modifiche API in B-1.0.jar.

Potrei cancellare manualmente B-1.0.jar dal mio repository locale. Quindi Maven scaricherà l'ultimo B-1.0.jar dal repository remoto la prossima volta che eseguirò "mvn install".

La mia domanda è come posso automaticamente consentire a Maven di scaricare gli ultimi artefatti da un repository remoto. Ho provato a impostare updatePolicy su "always". Ma questo non ha funzionato.

risposta

27

Maven non ri-download mai versioni - 1.0 è considerato definitivo e le nuove versioni dovrebbero utilizzare una nuova versione.

Se il modulo B è ancora in fase di sviluppo, è necessario utilizzare la versione 1.0-SNAPSHOT - istantanee sono una versione speciale Maven che controllare gli aggiornamenti, e quando schierato vengono memorizzati con il timestamp e numero di build per l'inseguimento.

+1

Questo è molto utile. SNAPSHOT è solo per questo scopo. – Richard

+0

Grazie Brett per la risposta :) – pranay

2

Sono d'accordo con Brett, sopra: le nuove versioni dovrebbero usare nuove versioni. Per il tuo caso, le istantanee sono probabilmente la soluzione migliore, ma qualcos'altro che potrebbe essere utile è usare dependency version ranges.

In tal modo è possibile specificare una versione di
(1.0,)
affermando che si accetta qualsiasi versione maggiore di 1,0.
o
[1.1.1,1.1.7]
accettare qualsiasi cosa tra (incluse) versioni 1.1.1 e 1.1.7.
La notazione segue sintassi intervallo matematica standard dove

[= inclusione nell'intervallo
(= esclusione dall'intervallo

(a scuola, ho sempre pensato delle parentesi quadre come "holding" di tale elemento , mentre la parentesi più morbida "lascia andare")

Questo può essere utile nei casi in cui le dipendenze sono ancora in fase di sviluppo frequente e non si vuole fare affidamento su nuove istantanee che potrebbero essere meno stabili e con maggiori probabilità di interruzione il tuo codice. Puoi specificare gli intervalli di sicurezza e regolare i limiti su o giù, come appropriato, nel tempo

Problemi correlati