2012-10-24 18 views
21

Devo creare un sito Web di dimensioni ridotte utilizzando spring. Così ho scelto spring template project poi new spring mvc project qualunque cosa provo c'è un errore che si è verificatoerrore di primavera durante la compilazione

Errors occurred during the build. 
Errors running builder 'Maven Project Builder' on project 'mTime'.Errors occurred during the build. 
Errors running builder 'Maven Project Builder' on project 'mTime'. 
Could not calculate build plan: Failed to parse plugin descriptor for org.apache.maven.plugins:maven-war-plugin:2.1.1 (C:\Users\User01\.m2\repository\org\apache\maven\plugins\maven-war-plugin\2.1.1\maven-war-plugin-2.1.1.jar): invalid LOC header (bad signature) 
Failed to parse plugin descriptor for org.apache.maven.plugins:maven-war-plugin:2.1.1 (C:\Users\User01\.m2\repository\org\apache\maven\plugins\maven-war-plugin\2.1.1\maven-war-plugin-2.1.1.jar): invalid LOC header (bad signature) 
Could not calculate build plan: Failed to parse plugin descriptor for org.apache.maven.plugins:maven-war-plugin:2.1.1 (C:\Users\User01\.m2\repository\org\apache\maven\plugins\maven-war-plugin\2.1.1\maven-war-plugin-2.1.1.jar): invalid LOC header (bad signature) 
Failed to parse plugin descriptor for org.apache.maven.plugins:maven-war-plugin:2.1.1 (C:\Users\User01\.m2\repository\org\apache\maven\plugins\maven-war-plugin\2.1.1\maven-war-plugin-2.1.1.jar): invalid LOC header (bad signature) 

so che maven è incluso nel spring framework, e quando posso controllare la directory, i barattoli ci sono.

Come posso risolvere questo errore?

risposta

52

La parte rilevante del messaggio di errore è:

invalid LOC header (bad signature) 

che suggerisce alcuni file binario di essere rotto, molto probabilmente una delle dipendenze. Se si dispone di una connessione Internet veloce, basta cancellare il repository intero Maven e lasciare esperto di riscaricare tutte le dipendenze:

rm -rf ~/.m2/repository/* 

Vedi anche

+1

che era così semplice, grazie accoppiano –

+0

mai avuto questo accadere prima, ma questo era sicuramente la risposta. – Nicholi

+3

Oppure puoi eliminare il binario spezzato, dal repository dei servizi locali. Invece di attendere il download di intere dipendenze. –

25

Dal mio esperienza, invalid LOC header (bad signature) è probabilmente dovuto al file .jar scaricato è danneggiato.

Se si dispone di una connessione Internet lenta, anziché eliminare l'intero repository Maven, è possibile provare a eliminare la cartella contenente il vaso problematico in base ai suggerimenti del messaggio di errore (ad esempio C:\Users\User01\.m2\repository\org\apache\maven\plugins\maven-war-plugin\2.1.1\). Quindi utilizzare mvn clean install -U per scaricare nuovamente le dipendenze.

+0

adesso va bene, grazie –

+0

Grazie a @Ken. Era un salvatore. –

+0

o.k. in linea di principio - può essere semi-automatizzato con una soluzione di script (vedere Risposta di ottobre 2013 –

2

aggiungi output di debug durante l'esecuzione di maven. Ti mostrerà quale barattolo è rotto. Elimina solo quello.

+0

o.k in linea di principio - vedere la soluzione di script –

3

per me eseguire il seguente script più volte ha funzionato. Cerca i problemi di riga di intestazione CEN e LOC nel risultato di mvn e chiede di eliminare i vasi uno alla volta. Dopo alcune eliminazioni e riesegui le cose dovrebbero funzionare di nuovo. Non ho osato automatizzare completamente.

#!/bin/sh 
# fix issues like: 
#[ERROR] error: error reading /Users/wf/.m2/repository/org/docx4j/xhtmlrenderer/1.0.0/xhtmlrenderer-1.0.0.jar; invalid LOC header (bad signature) 
# WF 2013-10-27 
mvnlog=/tmp/mvnlog$$ 
mvnproblem=/tmp/mvnproblem$$ 
mvn install | tee $mvnlog 
grep "invalid ... header" $mvnlog > $mvnproblem 
for culprit in `cat $mvnproblem | cut -d" " -f5 | cut -d ";" -f1` 
do 
    echo "fix mvn LOC header issue with $culprit? yes/no/abort" 
    read answer 
    case $answer in 
     y*|Y*) rm $culprit;; 
     n*|N*) ;; 
     *) exit 1; 
    esac 
done 
rm -f $mvnproblem 
rm -f $mvnlog 
0
Help -> Install New Softwares 

Da lì installare il bundle con gli sviluppi Web, XML, CSS, Java EE ... E dopo che se questo problema costruita continuano, si prega di utilizzare il comando

rm -rf ~/.m2/repository/* 
0

Prova questo:

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

Getta Perché il tuo .jar è non valido o danneggiato.

seguire la procedura:

Nota: La cartella .m2 è nascosta per impostazione predefinita. UnHide the Folder.

Passaggio 1: Elimina tutto il contenuto nella cartella .m2/repository.

Passaggio 2: riavviare il tuo Eclipse.

Passaggio 3: Maven-> Aggiorna progetto .Checked- Forza aggiornamento di istantanee/rilasci.

Passaggio 4: Esegui come Maven Clean.

Passaggio 5: esecuzione come installazione di Maven.

Passaggio 6: Pulisci progetto.

Passaggio 7: esecuzione del progetto.

Spero che troviate la vostra soluzione qui ..

Thanks ..

1

Un'altra soluzione per trovare il colpevole quando ottiene questo errore a partire Tomcat su Windows o quando non è possibile eseguire lo script di Wolfgang è quello di sostituire JarResourceSet.class in catalina.jar con una versione con debug extra.

Ie google per il codice sorgente per la versione di Tomcat e adattare il metodo initInternal():

String processingJar = ""; 

    try (JarFile jarFile = new JarFile(getBase())) { 
     processingJar = jarFile.getName(); 

     ... 
    } catch (IOException ioe) { 
     System.out.println("Failed with " + processingJar); 
     throw new IllegalArgumentException(ioe); 
    } 

Per costruire, classpath deve puntare alla directory lib di Tomcat per esempio:

javac -cp C:\apache-tomcat-X.Y.Z\lib\* JarResourceSet.java 

Quindi utilizzare 7zip o un programma simile per inserirlo in catalina.jar nella directory appropriata ed eseguire Tomcat. Sono rimasto stupito dal fatto che funzionasse la prima volta, ma è stato così. (Quindi devi solo trovare il posto nel repository .m2 e cancellare e ricostruire ecc.)

1

Se non vuoi rimuovere completamente il tuo repository di Maven locale, usa il comando seguente per trovare il file rotto manufatti e rimuoverli:

public static void main(String[] args) throws IOException { 
    findBrokenZip(Paths.get(System.getProperty("user.home") + "/.m2/repository")); 
} 

static void findBrokenZip(Path path) throws IOException { 
    try (DirectoryStream<Path> stream = Files.newDirectoryStream(path)) { 
     for (Path entry : stream) { 
      if (Files.isDirectory(entry)) { 
       findBrokenZip(entry); 
      } else { 
       if (entry.getFileName().toString().endsWith(".jar")) { 
        try (JarFile zipFile = new JarFile(entry.toFile())) { 
         zipFile.getManifest(); 
        } catch (ZipException e) { 
         Files.delete(entry); 
        } 
       } 
      } 
     } 
    } 
} 
Problemi correlati