2012-10-24 9 views
21

Ich muss kleine Website mit spring machen. so wählte ich spring template project dann new spring mvc project, was ich versuche, ein Fehler ist, dieFederfehler während Build

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) 

aufgetreten ich weiß, dass maven in spring framework enthalten ist, und wenn ich das Verzeichnis überprüfen, sind die Gläser gibt.

Wie kann ich diesen Fehler beheben?

Antwort

52

Der relevante Teil der Fehlermeldung ist:

invalid LOC header (bad signature) 

die einige Binärdatei schon sagt, eine höchstwahrscheinlich der Abhängigkeiten bricht. Wenn Sie eine schnelle Internetverbindung haben, nur Ihre ganze Maven-Repository löschen und lassen Maven alle Abhängigkeiten redownload:

rm -rf ~/.m2/repository/* 

Siehe auch

+1

, die so einfach war, danke –

+0

paaren das noch nie geschehen war, aber das war sicherlich die Antwort. – Nicholi

+3

Oder Sie können gebrochene Binärdatei von lokalen Maven Repo löschen. Anstatt darauf zu warten, dass ganze Abhängigkeiten erneut heruntergeladen werden. –

25

Aus meiner Erfahrung, invalid LOC header (bad signature) ist höchstwahrscheinlich aufgrund der heruntergeladenen .jar-Datei ist beschädigt.

Wenn Sie eine langsame Internetverbindung haben, anstatt das gesamte Maven-Repository zu löschen, können Sie versuchen, den Ordner mit dem problematischen Jar gemäß den Hinweisen der Fehlermeldung (d. H. C:\Users\User01\.m2\repository\org\apache\maven\plugins\maven-war-plugin\2.1.1\) zu löschen. Verwenden Sie dann mvn clean install -U, um die Abhängigkeiten erneut herunterzuladen.

+0

ist es jetzt gut, danke –

+0

Danke @Ken. Es war ein Retter. –

+0

o.k. im Prinzip - kann mit einer Skript-Lösung teilautomatisiert werden (siehe Antwort vom Okt 2013 –

2

Debug-Ausgabe beim Ausführen von Maven hinzufügen. Es zeigt dir, welches Glas gebrochen ist. Löschen Sie nur diesen einen.

+0

o.k im Prinzip - siehe Skriptlösung –

3

für mich läuft das folgende Skript mehrere Male gearbeitet. Es sucht nach CEN- und LOC-Kopfzeilen Probleme im MVN-Ergebnis und fragt nach Löschen der Gläser nacheinander. Nach ein paar Löschungen und Wiederholungen sollte es wieder funktionieren. Ich habe mich nicht getraut, es komplett zu automatisieren.

#!/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 

Von dort das Bündel mit Web Entwicklungen installieren, XML, CSS, Java EE ... Und danach, wenn diese gebautes Problem noch weiter, verwenden Sie bitte den Befehl

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

Versuchen Sie folgendes:

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

Es werfen, weil Ihre .jar ungültig oder beschädigt ist.

Folgen Sie den Schritten:

Hinweis: .m2 Ordner ist standardmäßig ausgeblendet. Enthülle den Ordner.

Schritt 1: Löschen Sie alle Inhalte in .m2/Repository-Ordner.

Schritt 2: Starten Sie Ihre Eclipse neu.

Schritt 3: Maven-> Projekt aktualisieren .Checked- Force Update von Snapshots/Releases.

Schritt 4: Als Maven Clean ausführen.

Schritt 5: Ausführen als Maven Install.

Schritt 6: Projekt bereinigen.

Schritt 7: Führen Sie Ihr Projekt aus.

Ich Hoffe, dass Sie Ihre Lösung finden .. Hier

Dank ..

1

Eine andere Lösung, um die Täter zu finden, wenn diese Fehler Starten Tomcat unter Windows oder wenn Sie nicht Wolfgangs Skript ausführen zu ersetzen JarResourceSet.class in catalina.jar mit einer Version, die extra Debugging hat.

zB Google für den Quellcode für Ihre Version von Tomcat und passen die initInternal() -Methode:

String processingJar = ""; 

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

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

zu bauen, Classpath zu Ihrem Tomcat lib zB anweisen:

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

Verwenden Sie dann 7zip oder ein ähnliches Programm, um es in catalina.jar in das entsprechende Verzeichnis einzufügen und Tomcat auszuführen. Ich war erstaunt, dass es das erste Mal funktioniert hat, aber es hat getan. (Dann müssen Sie nur finden, wo in Ihrem .m2-Repository die anstößige JAR-Datei ist und löschen und neu erstellen usw.)

1

Wenn Sie Ihr lokales maven-Repository nicht vollständig entfernen möchten, verwenden Sie Folgendes, um das kaputte zu finden Artefakte sie und entfernen:

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); 
        } 
       } 
      } 
     } 
    } 
} 
Verwandte Themen