Come forzare l'aggiornamento di Maven?


731

Ho importato il mio progetto già funzionante su un altro computer e ha iniziato a scaricare le dipendenze.

Apparentemente la mia connessione Internet si è interrotta e ora ottengo quanto segue:

    >Build errors for comics; org.apache.maven.lifecycle.LifecycleExecutionException:
    Failed to execute goal on project comicsTest: Could not resolve dependencies for project comicsTest:comicsTest:war:0.0.1-SNAPSHOT:
    The following artifacts could not be resolved:
    org.springframework:spring-context:jar:3.0.5.RELEASE,
    org.hibernate:hibernate-entitymanager:jar:3.6.0.Final,
    org.hibernate:hibernate-core:jar:3.6.0.Final,
    org.hibernate:hibernate-commons-annotations:jar:3.2.0.Final,
    org.aspectj:aspectjweaver:jar:1.6.8,
    commons-lang:commons-lang:jar:2.5,

    >mysql:mysql-connector-java:jar:5.1.13: Failure to transfer org.springframework:spring-context:jar:3.0.5.RELEASE from http://repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced.

    >Original error: Could not transfer artifact org.springframework:spring-context:jar:3.0.5.RELEASE from central (http://repo1.maven.org/maven2): No response received after 60000

Come forzare l'aggiornamento di Maven?


Nota a margine: ho riscontrato questo problema con Atlassian Maven (dal plug-in SDK) e l'aggiornamento alla versione più recente ha risolto il problema.
Wirone,

Risposte:


1597
mvn clean install -U

-Usignifica forzare l'aggiornamento delle dipendenze dello snapshot . Le dipendenze di rilascio non possono essere aggiornate in questo modo.


32
Sono d'accordo con lwpro2, anche questo ha risolto il mio problema. Fare solo mvn clean non è abbastanza. La risposta di Navi non è sufficiente per risolvere il problema.
R. van Twisk,

1
Credo che questo sia più complicato se si utilizzava artefattore e si utilizzava l'ID repository "centrale", poiché i metadati apparentemente non vengono ripuliti.
ggb667,

2
Questo non sembra effettivamente aggiornare i barattoli di dipendenza dell'istantanea, ma solo i metadati.
Roddy of the Frozen Peas,

se è causato dal file .lastupdated, generato dall'ultimo download della dipendenza non riuscito, questo metodo non funzionerà, abbiamo bisogno di qualcosa come la risposta di Rober Reiz
Junchen Liu,

1
Sto cercando l'aiuto per le versioni precedenti e fino alla versione 2.0.4, la descrizione per il flag -U era: "-U, - update-snapshot Aggiorna tutte le snapshot indipendentemente dalle politiche del repository" a partire dalla 2.0.5, è diventato: "-U, - update-snapshot Forza un controllo per versioni aggiornate e snapshot su repository remoti" Ed è stato così da allora. Entrambe le versioni sono state rilasciate nel 2007. Mi chiedo se la risposta debba essere modificata anche per tenere conto delle versioni?
Cleberz,

93

Se il tuo repository locale è in qualche modo confuso per i vasetti di rilascio anziché per le istantanee ( -Ue --update-snapshotsaggiorna solo le istantanee), puoi eliminare il repository locale usando quanto segue:

 mvn dependency:purge-local-repository

Probabilmente vorrai quindi pulire e reinstallare:

 mvn dependency:purge-local-repository clean install

Molte altre informazioni disponibili su https://maven.apache.org/plugins/maven-dependency-plugin/examples/purging-local-repository.html


8
Non appena l'ho fatto mvn dependency:purge-local-repository, ho semplicemente scaricato di nuovo tutte le dipendenze, che è esattamente quello che volevo
smac89

92

-U sembra forzare l'aggiornamento di tutte le dipendenze.

Se vuoi aggiornare una singola dipendenza senza ripulirla o -Upuoi semplicemente rimuoverla dal tuo repository locale e quindi compilare.

L'esempio seguente se per l'aggiornamento slf4j-api 1.7.1-SNAPSHOT:

rm -rf ~/.m2/repository/org/slf4j/slf4j-api/1.7.1-SNAPSHOT
mvn compile

Funziona bene se stai usando un altro strumento diverso da Maven che fa riferimento al tuo repository Maven locale.
Mansoor Siddiqui,

57

Tutte le risposte qui non hanno funzionato per me. Ho usato il metodo hammer:

find ~/.m2/ -name "*.lastUpdated" | xargs rm

Ciò ha risolto il problema :-)


1
@ DJ2 Questo elimina tutti i file nella directory .m2denominata*.lastUpdated
sjngm

find ~/.m2/ -name "*.lastUpdated" -deletefarebbe a meno del pericolo xargso del rmsuperamento di alcuni limiti (se vengono trovati molti file).
A Sz

45

Puoi fare efficacemente da Eclipse IDE. Naturalmente se lo stai usando.

Project_Name->Maven->Update Project Configuration->Force Update of Snapshots/Releases

1
Ho fatto la versione della riga di comando nella risposta di @ lwpro2, che mi ha permesso di compilare sulla riga di comando , ma poi non sono ancora riuscito a compilare in Eclipse. In questo modo è stato creato tramite Eclipse.
Brick,

Funziona per me solo se chiudo e riapro Eclipse dopo aver eseguito l'aggiornamento.
Ceklock,

33

Nel caso in cui qualcuno desideri aggiornare solo le dipendenze dello snapshot del progetto e non desideri installare artefatto:

mvn dependency:resolve -U

Non dimenticare di reimportare le dipendenze nel tuo IDE. In IDEA devi fare clic con il tasto destro sul file pom e scegliere Maven -> Reimport


13

Se non sei sicuro di cosa ci sia nel tuo repository locale, ti consiglio di lanciare una build con l'opzione:

-Dmaven.repo.local=localrepo

In questo modo ti assicurerai di costruire in un ambiente pulito.


5
questo comando indica che usa la cartella localrepo come repository locale. va bene per un singolo spazio di lavoro del progetto, ma male se hai più di un progetto e pochi dipendono dall'altro. allora è meglio dare un percorso completo come -Dmaven.repo.local = / data / my / localrepoDir
tgkprog

9

Nel mio caso prima ho fatto:

mvn clean install -U

Stava ancora mostrando lo stesso errore, quindi ho chiuso il progetto e l'ho riaperto. Finalmente ha funzionato.


Penso che potresti semplicemente reimportare le dipendenze per evitare la riapertura del progetto
GlaIZier,

4

Se stai usando l' IDE di eclissi, allora:

  • Seleziona progetto.
  • Premi alt + F5, si aprirà la finestra per Update Maven Project.

  • Controllare: forza l'aggiornamento di istantanee / versioni e fare clic su OK.

Se si utilizza Intellij IDE

  • vai alle impostazioni / Maven
  • seleziona Aggiorna sempre gli snapshot

3

Ho usato l'IDE IntelliJ e ho avuto un problema simile e per risolvere ho fatto clic su "Genera origini e aggiorna cartelle per tutti i progetti" nella scheda Maven.

inserisci qui la descrizione dell'immagine


2

Ho l'errore in un altro contesto. Quindi la mia soluzione potrebbe essere utile per gli altri che si imbattono nella domanda:

Il problema: ho copiato il repository locale su un altro computer, che non ha alcuna connessione a un repository speciale. Quindi Maven ha provato a verificare i manufatti rispetto al repository non valido.

La mia soluzione: rimuovere i file _maven.repositories.


2

Questa è una delle cose più fastidiose di Maven. Per me succede quanto segue: se aggiungo una dipendenza che richiede più dipendenze e sempre di più ma ho una connessione lenta, si arresta durante il download e il timeout. Mentre il timeout di tutte le dipendenze non ancora recuperate viene contrassegnato con i segnaposti nella cache .m2 e Maven non lo raccoglierà (mai) a meno che non rimuova la voce dei segnaposti dalla cache (come altri indicato) rimuovendolo.

A mio avviso, Maven o, più precisamente, il plugin Eclipse Maven ha un bug in merito. Qualcuno dovrebbe segnalarlo.



1

Ho lo stesso errore con la dipendenza android-maps-utils. L'uso del pacchetto di tipo aar nella sezione delle dipendenze risolve il mio problema. Di default il tipo è jar, quindi potrebbe essere verificato quale tipo di dipendenza nel repository viene scaricato.


1

Per risolvere questo problema da Eclipse:

1) Aggiungi la dipendenza seguente in Maven pom.xml e salva il file pom.xml.

<!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>1.3.1</version>
</dependency>

2) Vai al progetto >> Maven >> Aggiorna progetto

seleziona il progetto e fai clic su OK.

3) Passaggio facoltativo, se non viene risolto fino al passaggio 2, procedere come segue dopo aver eseguito il passaggio 1

Vai al progetto >> Maven >> Aggiorna progetto >> seleziona la casella 'Forza aggiornamento di istantanee / rilasci'

seleziona il progetto e fai clic su OK.


1

Le versioni precedenti di Maven non imponevano il controllo per le versioni mancanti quando usato -U con mvn clean install, solo le istantanee, sebbene la versione più recente supporti questo.

Per qualcuno ancora alle prese con la versione precedente, seguire può essere utile-

Su Windows:

cd %userprofile%\.m2\repository
for /r %i in (*.lastUpdated) do del %i

Su Linux:

find ~/.m2  -name "*.lastUpdated" -exec grep -q "Could not transfer" {} \; -print -exec rm {} \;

Ogni volta che Maven non può scaricare dipendenze per nessun motivo (connettività / non esiste ecc.), Aggiungerà il ".error = Impossibile trasferire artefatto" nel file dependency-name.lastUpdate nella rispettiva cartella nella directory $ home / .m2. La rimozione di questi file costringerà Maven a provare a recuperare nuovamente le dipendenze.


0

È importante aggiungere che la differenza principale nell'esecuzione mvn con -U e senza -U è che -Usovrascriverà i tuoi barattoli SNAPSHOT locali con barattoli SNAPSHOT remoti.

Barattoli SNAPSHOT locali creati da local mvn installnei casi in cui sono presenti altri moduli del proj che generano barattoli.


0

-U viene utilizzato per forzare l'aggiornamento di Repo. Uso

mvn -U clean install

Questa è la stessa risposta esatta della risposta accettata. Dato 6 anni prima ...
Kerwin Sneijders il

@KerwinSneijders Avevo aggiunto la risposta 2 anni fa a quel tempo, la risposta accettata non forniva informazioni su cosa -U fa qui
Sanjeev Guglani il

Per quanto ne so, la risposta accettata includeva tali informazioni dal giorno in cui sono state pubblicate. (14 marzo 12). E anche se non lo fosse, questa informazione è meglio pubblicata in un commento sotto le risposte accettate in quanto non è una risposta ma piuttosto informazioni aggiuntive
Kerwin Sneijders

0

Ho provato tutte le risposte qui, ma nulla sembrava funzionare. Ho riavviato prima il mio computer e poi ho funzionato mvn clean install -U. Ciò ha risolto il mio problema.


0

Quello che fa Maven è, scarica tutte le dipendenze del tuo progetto nel tuo repository locale (cartella .m2). A causa di Internet che causa problemi con il tuo repository locale, il tuo progetto sta affrontando problemi. Non sono sicuro se questo sicuramente ti aiuterà o no, ma puoi provare a eliminare tutti i file all'interno della cartella del repository all'interno della cartella .m2. Dal momento che non ci sarebbe nulla nel repository locale, Maven sarebbe costretto a scaricare di nuovo le dipendenze, forzando così un aggiornamento. Generalmente, la cartella .m2 si trova in c: users: [nome utente] :. m2


-1

Ho avuto questo problema per un motivo diverso. Sono andato al repository Maven https://mvnrepository.com alla ricerca dell'ultima versione di Spring Core, che all'epoca era 5.0.0.M3 / Il repository mi ha mostrato questa voce per il mio pom.xml:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>5.0.0.M3</version>
</dependency>

Sono ingenuo che io sia, ho pensato che il commento mi dicesse che il vaso si trova nel repository predefinito.

Tuttavia, dopo un sacco di colpi alla testa, ho visto una nota proprio sotto l'xml che diceva "Nota: questo manufatto si trovava nel repository Alfresco Public ( https://artifacts.alfresco.com/nexus/content/repositories/public/ ) "

Quindi il commento nell'XML è completamente fuorviante. Il vaso si trova in un altro archivio, motivo per cui Maven non è riuscito a trovarlo!


-3

Possiamo forzare per ottenere l'ultimo aggiornamento del repository di release e snapshot con il comando seguente:

mvn --update-snapshots clean install

12
Questa è la stessa risposta esatta della risposta accettata. -U è la forma abbreviata di --update-snapshot.
Roddy of the Frozen Peas,

-3

Ho avuto lo stesso errore e correre mvn install -Ue poi correre ha mvn installfunzionato per me.


10
Per favore, non pubblicare le risposte "la cosa menzionata in tutte le altre risposte ha funzionato anche per me" .
Kryger,

-4

Mi sono imbattuto in questo di recente e in esecuzione quanto segue risolto tutti i problemi

mvn -fae install

5
-fae,--fail-at-end Only fail the build afterwards; allow all non-impacted builds to continueSembra uno strano modo di riparare dipendenze esterne non aggiornate.
Donatello,

-5

mvn clean install -Unon funziona Tuttavia, mvn -U cleanseguito da mvn clean install.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.