Maven: impossibile leggere il descrittore del manufatto


258

Spero che qualcuno mi possa aiutare con un problema con cui sto lottando.

Quando provo a compilare il mio progetto dal terminale ottengo questo errore:

Failed to read artifact descriptor for com.morrislgn.merchandising.common:test-data-utils:jar:0.3b-SNAPSHOT: Could not find artifact com.morrislgn.merchandising:merchandising:pom:0.3b-SNAPSHOT

Il common.test-data-utilsbarattolo viene creato da un progetto separato e condiviso tra questo e un altro progetto (l'altro progetto non viene creato, ma ciò dipende da un altro problema).

Sono in grado di creare com.morrislgn.merchandising.common:test-data-utilssenza problemi, posso vedere la voce che fa nel .m2repository locale sul mio computer. Ho reindicizzato il mio repository anche in Eclipse.

Il POM per il mio progetto ha questa voce:

<dependency>
    <groupId>com.morrislgn.merchandising.common</groupId>
    <artifactId>test-data-utils</artifactId>
    <version>0.3b-SNAPSHOT</version>
</dependency>

Il che mi sembra corretto: il POM non segnala alcun errore neanche quando viene visualizzato in Eclipse.

Qualcuno può dirmi che cosa mi sto perdendo qui o che sto facendo di sbagliato?

Risposte:


183

Puoi sempre provare mvn -U clean install

-U impone un controllo per le versioni aggiornate e le istantanee sui repository remoti.


40
@MrPhi: se si dispone del plug-in m2e, è possibile utilizzare Maven -> "Aggiorna progetto ...". La finestra di dialogo successiva avrà un'opzione per forzare gli aggiornamenti di istantanee e rilasci.
Aaron Digulla,

1
@AaronDigulla È quella finestra di dialogo che sta causando l'errore per me.
Jeroen,

1
Per far funzionare tutto ciò, è necessario eseguire il comando all'interno della directory principale del progetto
Daria

Ho avuto anche un problema simile. Questo aiuta davvero e, inoltre, se stai usando un repository privato mvn, assicurati di aggiungerlo ~/.m2/setting.xmlprima alla sezione mirror e poi dopo l'esecuzione mvn -U clean install, assicurati di Reimport(fare clic destro sul progetto, quindi sotto la Mavensezione inferiore c'è un Reimportpulsante ).
JACK ZHANG,

1
@TomaszWaszczyk: Sì, c'è. 1. Vista spettacolo Windows-> Terminale. 2. Aggiungi terminale locale 3. cd PomFilePath 4. Esegui il comando
Vishnu Dahatonde

142

Questo problema può verificarsi se si dispone di alcuni progetti figlio che fanno riferimento a un pom padre e non è stato installato dalla directory pom padre (eseguito mvn installdalla directory padre). Uno dei progetti figlio può dipendere da un progetto di pari livello e quando va a leggere il pom del fratello, fallirà con l'errore menzionato nella domanda a meno che non sia stato installato dalla directory pom principale almeno una volta.

Ho appena riscontrato questo problema durante lo spostamento di un progetto su un nuovo computer. Avevo l'abitudine di eseguire comandi dal progetto figlio e non ho eseguito l'installazione sul genitore.


13
Inoltre, quando si esegue mvn installil genitore, è possibile aggiungere anche -Noperazioni non ricorsive. Ciò farà in modo che Mavven salti tutti i moduli (incluso uno che non funziona) e facciano solo installgoal per il genitore.
Jacek Prucia,

@JacekPrucia è bello sapere che è necessario installare anche un manufatto pom (se il tuo genitore è un pom)
Adrian

@bzuillsmith perché dovresti correre mvn installnel genitore. Questo non verrebbe usato solo per poter scaricare la dipendenza tra fratelli? Se ti è capitato di andare nella directory dei fratelli e correre mvn installda lì in modo che il vaso si trovasse nel tuo repository locale, questo non ottiene la stessa cosa esatta?
user2158382

Sono passati alcuni anni da quando ho usato Maven, ma - Sì, credo che tu possa installare le dipendenze tra fratelli una per una. L'installazione dal genitore tende ad essere meno lavoro (meno comandi da digitare ed eseguire). Potrebbero esserci casi in progetti di grandi dimensioni in cui non desideri installare tutti i progetti figlio, nel qual caso dovrai eseguirli singolarmente.
bzuillsmith

Il mio progetto come ch-multip-spring \ simple-parent \ simple-model \ pom.xml, eseguo un'installazione pulita dalla cartella principale ch-multip-spring (non anche da simple-parent), ha risolto il mio problema in modo simile al titolo del post.
IcyBrk,

104

Ha avuto lo stesso problema con IntelliJ IDEA e seguenti ha funzionato.

  • Vai a File
  • Selezionare Settings
  • Selezionare Build, Execution, Deployments
  • Seleziona Build Toolsdal menu a discesa
  • Seleziona Mavendal menu a discesa
  • Spuntare la Always update snapshotscasella di controllo

schermata di IntelliJ 2017.2> Preferenze / Impostazioni> Build, Execution, Deployment> Build Tools> Maven> Aggiorna sempre gli snapshot (casella di controllo)


1
Questo ha funzionato per me, ma non capisco perché - stavo tentando di compilare dalla riga di comando. C'era qualcosa nella cache di IntelliJ?
goodOldFashioned

Ha funzionato anche per me! Non riesco a credere quanto sia stato frustrante. Grazie!
Ben Arena,

@ goodOldFashioned: questo "aggiorna sempre" ha sovrascritto il file .... lastUpdated dal repository locale. -U fa lo stesso dalla riga di comando. Intellij ha quindi corretto il repository locale e quindi la riga di comando ha funzionato di nuovo.
Frischling,

Semplice ed efficace
Ojonugwa Jude Ochalifu,

2
dopo aver
navigato su

37

Se si utilizza Eclipse, fare clic con il tasto destro del mouse sul progetto -> Maven -> Aggiorna progetto . Si aprirà la finestra di dialogo Aggiorna progetto Maven.

Nella finestra di dialogo, selezionare la casella di controllo Forza aggiornamento di istantanee / rilasci e fare clic su OK . (Fare riferimento all'immagine seguente)

Finestra di dialogo Aggiorna progetto Maven

Questo ha funzionato per me!


36

Se si utilizza eclipse, fare clic con il tasto destro del mouse su progetto -> proprietà -> Maven e assicurarsi che non sia stato selezionato " Risolvi dipendenze da progetti dell'area di lavoro ".

Spero che questo ti aiuti.


4
Per me funziona. Ma non capisco perché? Qualche spiegazione dietro questo?
Anand,

1
questo non ha funzionato per me, inizialmente mancavano 12 decenze, dopo averlo fatto ora sono 74
user2044822

27

So di essere abbastanza tardi per la conversazione, ma ho avuto anche questo problema. Penso che il problema sia stato il firewall della mia azienda. La mia soluzione era quella di scollegare dalla rete, connettersi al nostro wireless aperto e quindi forzare un aggiornamento tramite Eclipse. Questo ha risolto tutto.



1
Grazie ragazzi! Ha funzionato per me e ha risparmiato molto tempo.
saidfagan il

14

Ho avuto lo stesso problema con eclipse in cui la riga di comando di maven build funzionava benissimo MA provalo

  • andare in .m2 / repository e cancellare la directory associata
  • esegui l'aggiornamento delle dipendenze di Maven in Eclipse

L'errore scompare ... perché la mia riga di comando di mvn ha funzionato con quelle directory ed eclissi .m2eclipse non ha potuto, non ne ho idea e fa un po 'schifo. Il mio progetto ora funziona di nuovo in eclissi.


su una nota a margine, siamo passati al livello .... molto più felice di formica e maven .... impostazione estremamente bella.
Dean Hiller,

Non sono nemmeno sicuro che sia qualcosa legato a Eclipse. Ho avuto lo stesso problema con IntelliJ e l'eliminazione dei pacchetti problematici e rieseguire mvn clean installlavorato
Jay

12

Ho avuto lo stesso problema con IntelliJ. Ho risolto con il tasto destro su pom.xml> Maven> Reimport


Sì, come se la vita fosse così semplice. Comunque, la risposta di @prime ha funzionato per me.
Imam Bux,

10

Ho risolto questo problema eliminando nelle cartelle del repository in cui questo errore mostrava tutto tranne i file .jar e .pom.


Ho anche risolto lo stesso problema eliminando i file correlati nel repository locale di Maven e quindi aggiornando l'intero progetto.
Ad Infinitum,

8

I problemi "Impossibile leggere il descrittore di artefatto" indicano generalmente un problema con il file pom della dipendenza nel repository di Maven. Vorrei suggerire di ricontrollare se il nome del file pom è lo stesso con quello previsto da maven, e anche di verificare se il contenuto del file pom è valido.


1
Il controllo di pom.xml è stato utile. Ho scoperto di avere avuto la stessa dipendenza due volte (errore copia e incolla). Dopo la pulizia tutto andava bene.
Adam Boczek

8

Per me, era legato all'impostazione di "User Setting.xml" all'interno

Window > preferences > Maven > User Settings > and then browsing to the user Settings inside the { maven unarchived directory / }/apache-maven-2.2.1/conf/settings.xml . 

6

Ho un progetto

 A/
 |--a1
 |--a2

Ora c'è un altro progetto nella nostra organizzazione

 B/
 |--b1
 |--b2
 |--b3

(Ogni modulo a1, b1 ecc. E i progetti Parent A, B hanno il proprio pom.xml secondo le regole standard di genitore e figlio)

Entrambi i progetti sono verificati sulla mia eclissi locale (da SVN). Sto lavorando attivamente su A.

Sono venuto a sapere che esiste una buona funzionalità comune (b4) sviluppata in B e che avevo bisogno di usarla.

 B/
 |--b1
 |--b2
 |--b3
 |--b4 (NEW)

Gli sviluppatori di b4 hanno distribuito questo modulo b4 come artefatto nel repository della nostra organizzazione. Ho incluso la dipendenza dal POM del mio modulo, ovvero pom.xml di a2. Eclipse ha scaricato l'artefatto reuqired dal repository e ho potuto importare le classi in esso.

Ora il problema inizia ... Avevo bisogno di controllare il codice sorgente di b4 per qualche scopo e dato che avevo già fatto il check-out B sulla mia eclissi locale, l'ho aggiornato da SVN e ho verificato il modulo b4. Ho anche eseguito pom.xml del modulo b4 con obiettivi come clean, package ecc. Dopo un po 'di tempo, quando ho finito la mia codifica, avevo bisogno di creare un JAR del mio modulo a2. Ho eseguito "pacchetto" su pom.xml e BAM di a2 !! errori n errori per il modulo a2. Anche questi errori non erano molto intuitivi. L'unica cosa è che c'era sicuramente il nome di b4 nei registri.

Soluzione: dopo aver provato molte soluzioni per molte ore, ho eseguito "mvn -U clean install" dalla console nel progetto del mio B direttamente (cioè in ../codebase/B). Poiché B è il genitore, il comando clean install è stato eseguito per tutti i moduli, incluso b4, ed è stato eseguito correttamente. Dopo questo ho eseguito "mvn -U clean install" per il mio progetto genitore che è A. E questo ha funzionato! il modulo a2 è stato compilato, installato, (impacchettato successivamente) con successo.

Qui il punto importante era se b4 è nel tuo spazio di lavoro, non solo installare b4. Dovrai eseguire l'installazione pulita completa B. Sono arrivato a questa soluzione dopo aver letto la risposta di Zuill

EDIT: un'altra cosa qui per notare che se non avessi avuto il progetto B verificato in ambiente locale, questo problema potrebbe non essersi verificato per me. Tendo a pensare che ciò sia accaduto perché avevo fatto il check-out di B nell'area di lavoro locale.


5

Citi due diversi ID gruppo com.morrislgn.merchandising.commone com.johnlewis.jec.webpim.common. Forse questo è il problema.


Buon posto - no, non è purtroppo. Ho copiato il tag sbagliato dall'XML POM, quello sopra il tag di cui avevo bisogno e non ho individuato ciò che avevo fatto. Ops! Ho modificato la domanda per correggere la mia stupidità!
Morrislgn,


4

Non ho avuto fortuna con l'aggiornamento tramite eclipse. Ho dovuto usare mvn clean install -U (che ha risolto tutto).


10
Anche Gal Bracha ha risposto a questo. Meglio votare una risposta funzionante e aggiungere commenti se necessario.
Brian White,

4

Per me, sembra che in realtà sia stato un problema con la dipendenza POM.

Ho risolto il problema utilizzando il repository virtuale jitpack, con il quale è possibile includere repository github in base al loro URL anziché al proprio POM (che sembra essere stato errato nel mio caso).

    <repository>
        <id>jitpack.io</id>
        <url>https://jitpack.io</url>
    </repository>

3

Ho avuto lo stesso problema per un po 'e nonostante ciò mvn -U clean installil problema non è stato risolto!

Alla fine ho risolto il problema eliminando l'intera .m2cartella, quindi ho riavviato il mio IDE e il problema era scomparso!

Quindi a volte il problema potrebbe sorgere a causa di alcune incompatibilità o problemi nel repository di Maven locale.


Ho provato a fare una risincronizzazione di Maven mentre non era in linea e ho completamente eliminato IntelliJ. Seguito il tuo consiglio, cancellato .m2, e ora funziona come un fascino! Grazie!
Victor Grazi,

3

Nel nostro caso l'errore è apparso a causa del gruppo errato che ha rinominato mentre alcuni progetti nella configurazione Maven multi-modulo fanno riferimento ad altri.

Avevamo un progetto aggregatore ( billing-parent) con due moduli ( billing-api, billing):

com.company.team:billing-parent
|-com.company.team:billing-api
|-com.company.team:billing

Il progetto billingdipende billing-api. Quindi nel suo pom.xmlaveva:

<dependency>
    <groupId>com.company.team</groupId>
    <artifactId>billing-api</artifactId>
    <version>${project.version}</version>
</dependency>

Abbiamo deciso di rinominare groupId da com.company.teama com.company.team.billing. Abbiamo sostituito il vecchio valore in parent pom.xmle in <parent>sezioni di entrambi i moduli. Ma ho dimenticato di aggiornare la dipendenza sopra. Quindi avevamo una configurazione in cui il billingprogetto fa riferimento al vecchio billing-apimanufatto. Alla fine becca build del billingmodulo dopo qualche tempo con l'errore simile

[ERROR] Failed to execute goal on project billing: Could not resolve dependencies for project com.company.team.billing:billing:jar:3.5.1-SNAPSHOT: Failed to collect dependencies at com.company.team:billing-api:jar:3.5.1-SNAPSHOT: Failed to read artifact descriptor for com.company.team:billing-api:jar:3.5.1-SNAPSHOT: Failure to find <parent of the com.company.team:billing-parent project which is not available any more>

nonostante il fatto che il billing-apimodulo venga compilato senza errori.

Soluzione 1: rinomina groupIdin dependencypure.

Soluzione 2: sostituisci groupIdcon la ${project.groupId}proprietà in questo modo:

<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>billing-api</artifactId>
    <version>${project.version}</version>
</dependency>

Conclusione. Quindi il mio consiglio nel caso in cui si verificasse un errore nella configurazione multi-modulo dovrebbe essere: controllare attentamente groupIde artifactIddelle dipendenze dai moduli vicini.


2

Navigare tramite shell all'interno della cartella del progetto ed eseguire il comando seguente:

mvn -U clean install

Di solito questo dovrebbe già risolvere il tuo problema.

Se vedi un messaggio come questo:

Impossibile risolvere le dipendenze per il progetto: war: 0.0.1-SNAPSHOT: impossibile raccogliere le dipendenze su com.sun.jersey: jersey-server: jar: 1.9

Quindi eseguire:

export MAVEN_OPTS=-Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2

seguito da:

mvn -U clean install

di nuovo per aggiornare finalmente le tue dipendenze.

Successivamente esegui una build pulita maven:

maven clean install

1

Ho avuto un problema simile. Nel mio caso, la versione di testng nella mia cartella .m2 / repository era corrotta, ma quando l'ho cancellata e ho fatto di nuovo un aggiornamento, tutto ha funzionato bene.


0

Ho avuto questo problema in Eclipse, mvn -U clean installnon ha funzionato ma facendo clic con il tasto destro del mouse sul progetto e selezionando Maven-> Aggiorna progetto è stato risolto.


0

Ho appena iniziato a utilizzare STS Eclipse con Maven per la prima volta. Il progetto che ho impostato aveva già il suo settings.xml. In questo caso, ti consigliamo di aggiornare il file settings.xml nella configurazione di esecuzione.

  1. fai clic destro su pom.xml e "Esegui come" -> "Esegui configurazioni ..."

  2. dove dice "Impostazioni utente" fai clic sul pulsante File e aggiungi settings.xml.

  3. Penso che questo sia specifico per il tuo progetto ma i miei "Obiettivi" sono impostati su "Installazione pulita" e ho controllato "Ignora test".


0

Questo errore sta sostanzialmente dicendo che Maven non è in grado di leggere una certa dipendenza dal repository locale. Potrebbe accadere perché un file jar non è stato scaricato correttamente. Quindi, vai al tuo repository locale maven e assicurati che non ci sia alcun file di estensione .lastUpdated .


0

Questo mi ha aiutato:

Dall'IDE (Red Hat CodeReady Studio nel mio caso).

Windows -> Mostra vista -> Terminale -> Apri / Aggiungi terminale locale

Esegui i comandi come segue>

$ cd /pom-file-path/

$ mvn -U 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.