it-swarm.com.de

Das Bereitstellen des Maven-Projekts löst Java.util.Zip.ZipException aus: Ungültiger LOC-Header (ungültige Signatur)

Ich erhalte die folgende Ausnahme, wenn ich meinen mvn install ausführe. Ich habe sogar das lokale Repository gelöscht und lief immer wieder die gleiche Ausnahme.

[ERROR] Fehler beim Ausführen von Ziel org.Apache.maven.plugins: maven-shade-plugin: 2.1: shade (Standard) für Projekt-Cores-Batch: Fehler beim Erstellen des schattierten JAR: ungültiger LOC-Header (ungültige Signatur) -> [Help 1 ]

<?xml version="1.0" encoding="UTF-8"?>
<plugin>
   <groupId>org.Apache.maven.plugins</groupId>
   <artifactId>maven-shade-plugin</artifactId>
   <version>2.1</version>
   <configuration>
      <skipTests>true</skipTests>
   </configuration>
   <executions>
      <execution>
         <phase>package</phase>
         <goals>
            <goal>shade</goal>
         </goals>
         <configuration>
            <artifactSet>
               <excludes>
                  <exclude>commons-logging:commons-logging:jar:*</exclude>
               </excludes>
            </artifactSet>
            <filters>
               <filter>
                  <artifact>*:*</artifact>
                  <excludes>
                     <!-- workaround for a spring issues -->
                     <exclude>META-INF/*.SF</exclude>
                     <exclude>META-INF/*.DSA</exclude>
                     <exclude>META-INF/*.RSA</exclude>
                     <!-- don't want to pick up any other log4j.xml -->
                     <exclude>log4j.xml</exclude>
                  </excludes>
               </filter>
            </filters>
            <!-- May be needed to work around another issue in Spring -->
            <transformers>
               <transformer implementation="org.Apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.handlers</resource>
               </transformer>
               <transformer implementation="org.Apache.maven.plugins.shade.resource.AppendingTransformer">
                  <resource>META-INF/spring.schemas</resource>
               </transformer>
            </transformers>
         </configuration>
      </execution>
   </executions>
</plugin>

Error:

[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-shade-plugin:2.1:shade (default) on project cores-batch: Error creating shaded jar: invalid LOC header (bad signature) -> [Help 1]
org.Apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.Apache.maven.plugins:maven-shade-plugin:2.1:shade (default) on project cores-batch: Error creating shaded jar: invalid LOC header (bad signature)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:217)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:153)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:145)
    at org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:84)
    at org.Apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.Java:59)
    at org.Apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.Java:183)
    at org.Apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.Java:161)
    at org.Apache.maven.DefaultMaven.doExecute(DefaultMaven.Java:320)
    at org.Apache.maven.DefaultMaven.execute(DefaultMaven.Java:156)
    at org.Apache.maven.cli.MavenCli.execute(MavenCli.Java:537)
    at org.Apache.maven.cli.MavenCli.doMain(MavenCli.Java:196)
    at org.Apache.maven.cli.MavenCli.main(MavenCli.Java:141)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.Java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.Java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.Java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.Java:352)
Caused by: org.Apache.maven.plugin.MojoExecutionException: Error creating shaded jar: invalid LOC header (bad signature)
    at org.Apache.maven.plugins.shade.mojo.ShadeMojo.execute(ShadeMojo.Java:528)
    at org.Apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.Java:101)
    at org.Apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.Java:209)
    ... 19 more
Caused by: Java.util.Zip.ZipException: invalid LOC header (bad signature)
    at Java.util.Zip.ZipFile.read(Native Method)
    at Java.util.Zip.ZipFile.access$1400(ZipFile.Java:56)
    at Java.util.Zip.ZipFile$ZipFileInputStream.read(ZipFile.Java:679)
    at Java.util.Zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.Java:415)
    at Java.util.Zip.InflaterInputStream.read(InflaterInputStream.Java:158)
    at Java.io.FilterInputStream.read(FilterInputStream.Java:107)
    at org.codehaus.plexus.util.IOUtil.copy(IOUtil.Java:189)
    at org.codehaus.plexus.util.IOUtil.copy(IOUtil.Java:175)
    at org.Apache.maven.plugins.shade.DefaultShader.addResource(DefaultShader.Java:427)
    at org.Apache.maven.plugins.shade.DefaultShader.shade(DefaultShader.Java:186)
    at org.Apache.maven.plugins.shade.mojo.ShadeMojo.execute(ShadeMojo.Java:458)
    ... 21 more
[ERROR] 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.Apache.org/confluence/display/MAVEN/MojoExecutionException
149
Karthick

Sie müssen überprüfen, welches Glas Problem gibt. Es muss beschädigt sein. Löschen Sie dieses Glas und führen Sie den Befehl mvn spring-boot:run erneut aus. Möglicherweise ist mehr als ein Glas beschädigt, sodass Sie jedes Mal, wenn Sie diesen Befehl ausführen müssen, um dieses Glas zu löschen, dieses Glas beschädigen. In meinem Fall war mysql, jackson, aspect jars dreimal mit dem Befehl mvn spring-boot:run beschädigt, und ich habe dies herausgefunden und die Gläser aus dem Ordner .m2 gelöscht. Jetzt ist das Problem behoben.

70
alok

Die JAR-Datei ist möglicherweise beschädigt. Versuchen Sie, den Inhalt des folgenden Ordners zu entfernen:

 C:\Users\[username]\.m2\repository

Klicken Sie dann mit der rechten Maustaste auf Ihr Projekt, wählen Sie "Maven", "Projekt aktualisieren" und aktivieren Sie "Aktualisierung von Snapshots/Releases erzwingen".

203
Siva Anand

Das Hauptproblem sind beschädigte Gläser.

Um den beschädigten zu finden, müssen Sie ein Java Exception Breakpoint in der Breakpoints-Ansicht von Eclipse oder Ihrer bevorzugten IDE hinzufügen, die Klasse Java.util.Zip.ZipException auswählen und die Tomcat-Instanz neu starten.

Wenn die JVM am Haltepunkt ZipException angehalten wird, müssen Sie im Stack-Trace zu JarFile.getManifestFromReference() wechseln und das Attribut name überprüfen, um den Dateinamen anzuzeigen.

Danach sollten Sie die Datei aus dem Dateisystem löschen und dann mit der rechten Maustaste auf Ihr Projekt klicken, Maven auswählen, Projekt aktualisieren und die Option Aktualisierung von Snapshots/Releases erzwingen aktivieren.

107

In gsitgithub/find-currupt-jars.txt listet der folgende Befehl alle beschädigten JAR-Dateien im Repository auf:

find  /home/me/.m2/repository/ -name "*jar" | xargs -L 1 Zip -T | grep error | grep invalid

Sie können die beschädigten JAR-Dateien löschen und das Projekt neu kompilieren.

Beispielausgabe:

warning [/cygdrive/J/repo/net/Java/dev/jna/jna/4.1.0/jna-4.1.0.jar]:  98304 extra bytes at beginning or within zipfile
  (attempting to process anyway)
file #1:  bad zipfile offset (local header sig):  98304
  (attempting to re-compensate)
Zip error: Zip file invalid, could not spawn unzip, or wrong unzip (original files unmodified)
38
Javier

Ich möchte meine Praxis geben.

Verwenden Sie Ihre bevorzugte IDE, zum Beispiel Eclipse hier:

  1. Suchen Sie einen geeigneten Speicherort im Ausnahmestapel
  2. Setzen Sie einen bedingten Haltepunkt
  3. Debuggen Sie es
  4. Das beschädigte Glas wird vor der Ausnahme gedruckt

enter image description here

9
samm

Die Lösung für mich war, mvn mit -X auszuführen:

$ mvn package -X

Schauen Sie dann rückwärts durch die Ausgabe, bis Sie den Fehler sehen, und fahren Sie dann fort, bis Sie die letzte JAR-Datei sehen, die mvn zu verarbeiten versucht hat:

...
... <<output ommitted>>
...
[DEBUG] Processing JAR /Users/snowch/.m2/repository/org/Eclipse/jetty/jetty-server/9.2.15.v20160210/jetty-server-9.2.15.v20160210.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.607 s
[INFO] Finished at: 2017-10-04T14:30:13+01:00
[INFO] Final Memory: 23M/370M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.Apache.maven.plugins:maven-shade-plugin:3.1.0:shade (default) on project kafka-connect-on-cloud-foundry: Error creating shaded jar: invalid LOC header (bad signature) -> [Help 1]
org.Apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.Apache.maven.plugins:maven-shade-plugin:3.1.0:shade (default) on project kafka-connect-on-cloud-foundry: Error creating shaded jar: invalid LOC header (bad signature)

Schauen Sie sich das letzte Glas an, bevor es fehlgeschlagen ist, und entfernen Sie es aus dem lokalen Repository, d. H.

$ rm -rf /Users/snowch/.m2/repository/org/Eclipse/jetty/jetty-server/9.2.15.v20160210/
5
Chris Snow

Sieht aus wie ein Konfigurationsproblem für den Maven-Compiler in Ihrer POM-Datei. Standardversion Java Quelle und Ziel ist 1.5, selbst verwendetes JDK hat eine höhere Version.

Um dies zu beheben, fügen Sie den Konfigurationsabschnitt für das Maven-Compiler-Plugin mit einer höheren Java -Version hinzu. Beispiel:

<plugin>
  <groupId>org.Apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.6.1</version>
  <configuration>
    <source>1.6</source>
    <target>1.6</target>
  </configuration>
</plugin>

Für weitere Informationen überprüfen Sie diese Links:

Maven-Compiler

Fehlerbericht

2
harvyS

Diese Antwort ist nicht für DevOps/Systemadministratoren gedacht, sondern für diejenigen, die IDE wie Eclipse verwenden und invalid LOC header (bad signature) Probleme haben.

Sie können die Aktualisierung der Maven-Abhängigkeiten wie folgt erzwingen:

enter image description here

enter image description here

1
Vishrant

Wir können die Validierung der Prüfsumme in maven mit mindestens zwei Optionen erzwingen:

1.Hinzufügen des --strict-checksums zu unserem Maven-Befehl.

2.Fügen Sie der Maven-Einstellungsdatei die folgende Konfiguration hinzu:

<settings xmlns="http://maven.Apache.org/SETTINGS/1.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.Apache.org/SETTINGS/1.0.0
                          https://maven.Apache.org/xsd/settings-1.0.0.xsd">
    <!--...-->
    <profiles>
        <profile>
            <!--...-->
            <repositories>
                <repository>
                    <id>codehausSnapshots</id>
                    <name>Codehaus Snapshots</name>
                    <releases>
                        <enabled>false</enabled>
                        <updatePolicy>always</updatePolicy>
                        <checksumPolicy>fail</checksumPolicy>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <updatePolicy>never</updatePolicy>
                        <checksumPolicy>fail</checksumPolicy>
                    </snapshots>
                    <url>
                        <!--...-->
                    </url>
                </repository>
            </repositories>
            <pluginRepositories>
                <!--...-->
            </pluginRepositories>
            <!--...-->
        </profile>
    </profiles>
    <!--...-->
</settings>

Weitere Details in diesem Beitrag: https://dzone.com/articles/maven-artifact-checksums-what

1
SHoko

Entfernen Sie über das Entfernen von .m2/repository hinaus die Anwendung vom Server, führen Sie den Server (ohne Anwendungen) aus, stoppen Sie ihn und fügen Sie die Anwendung erneut hinzu. Jetzt soll es funktionieren. Aus irgendeinem Grund hat das Bereinigen von Serverordnern von der Benutzeroberfläche nicht den gleichen Effekt.

0
Alex

Es wird hauptsächlich von maven verursacht. Wenn Sie IDEA verwenden, versuchen Sie die folgenden Schritte:

1. Verwenden Sie IDEA, um "maven clean" auszuführen, dann sehen Sie

 [INFO] Scanning for projects... [WARNING]  [WARNING] Some problems were encountered while building the effective model for com.hisen:BookSystem_V0:war:1.0-SNAPSHOT [WARNING] 'build.plugins.plugin.version' for org.Apache.maven.plugins:maven-compiler-plugin is missing. @ line 116, column 15 [WARNING]  [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.

ersetzen Sie das falsche Glas

2. Verwenden Sie IDEA, um "maven compile" auszuführen, dann sehen Sie

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] Failure executing javac, but could not parse the error:
错误: 读取/Users/qinkai/.m2/repository/ch/qos/logback/logback-classic/1.1.1/logback-classic-1.1.1.jar时出错; invalid LOC header (bad signature)
错误: 读取/Users/qinkai/.m2/repository/ch/qos/logback/logback-core/1.1.1/logback-core-1.1.1.jar时出错; invalid LOC header (bad signature)
2 个错误

löse das falsche Glas

dann ist das problem gelöst.

0
Qin Kai

meistens geschieht dies, weil die beschädigten Zars die URL des zentralen Maven-Repositorys in der Datei pom.xml aktualisieren. Mein Problem wurde behoben. Sie können diese URL verwenden https://repo.maven.Apache.org/maven2/ aber vorher die Dateien im .m2 Verzeichnis löschen, hoffe das hilft

0
techasutos

"Ungültiger LOC-Handler (falsche Signatur)"
Dies liegt wahrscheinlich an beschädigten Gläsern, die von Maven heruntergeladen wurden. Schnellreparatur, ich empfehle die Sicherung des . M2/repository -Verzeichnisses und das Löschen von . m2/repository Verzeichnis, dann führen Sie einen Neuaufbau oder ein Maven-Update durch.

0
Shivdas

Erstellen Sie ein Projekt mit der Option "-e -X", um das beschädigte Glas zu finden und das Glas aus dem lokalen Repository zu entfernen.

0
Ajeesh

Dieses Problem trat auf, als ich mein Ohr für meine lokale Weblogic-Instanz bereitstellte. Das Löschen des lokalen Repositorys und das erneute Erstellen des Ohrs lösten das Problem für mich.

0
SMT_Dev

Hier ist ein kleiner Detektor in Java geschrieben, einfach kopieren und ausführen :)

import Java.io.IOException;
import Java.nio.file.Files;
import Java.nio.file.Path;
import Java.nio.file.Paths;
import Java.util.ArrayList;
import Java.util.List;
import Java.util.jar.JarFile;
import Java.util.stream.Collectors;

public class JarValidator {

    public static void main(String[] args) throws IOException {
        Path repositoryPath = Paths.get("C:\\Users\\goxr3plus\\.m2");

        // Check if the main Repository Exists
        if (Files.exists(repositoryPath)) {

            // Create a class instance
            JarValidator jv = new JarValidator();

            List<String> jarReport = new ArrayList<>();
            jarReport.add("Repository to process: " + repositoryPath.toString());

            // Get all the directory files
            List<Path> jarFiles = jv.getFiles(repositoryPath, ".jar");
            jarReport.add("Number of jars to process: " + jarFiles.size());
            jarReport.addAll(jv.openJars(jarFiles, true));

            // Print the report
            jarReport.stream().forEach(System.out::println);

        } else {
            System.out.println("Repository path " + repositoryPath + " does not exist.");
        }
    }

    /**
     * Get all the files from the given directory matching the specified extension
     * 
     * @param filePath      Absolute File Path
     * @param fileExtension File extension
     * @return A list of all the files contained in the directory
     * @throws IOException
     */
    private List<Path> getFiles(Path filePath, String fileExtension) throws IOException {
        return Files.walk(filePath).filter(p -> p.toString().endsWith(fileExtension)).collect(Collectors.toList());
    }

    /**
     * Try to open all the jar files
     * 
     * @param jarFiles
     * @return A List of Messages for Corrupted Jars
     */
    private List<String> openJars(List<Path> jarFiles, boolean showOkayJars) {
        int[] badJars = { 0 };
        List<String> messages = new ArrayList<>();

        // For Each Jar
        jarFiles.forEach(path -> {

            try (JarFile file = new JarFile(path.toFile())) {
                if (showOkayJars)
                    messages.add("OK : " + path.toString());
            } catch (IOException ex) {
                messages.add(path.toAbsolutePath() + " threw exception: " + ex.toString());
                badJars[0]++;
            }
        });

        messages.add("Total bad jars = " + badJars[0]);
        return messages;
    }

}

Ausgabe

Repository to process: C:\Users\goxr3plus\.m2
Number of jars to process: 4920
C:\Users\goxr3plus\.m2\repository\bouncycastle\isoparser-1.1.18.jar threw exception: Java.util.Zip.ZipException: Zip END header not found
Total bad jars = 1
BUILD SUCCESSFUL (total time: 2 seconds)
0
GOXR3PLUS

Dies kann viele Gründe haben:

1: Versuchen Sie, Ihre Web.XML-Version zu ändern

2: Das Jar, das Sie verwenden möchten, ist möglicherweise beschädigt. Zum Beispiel: Verwenden Sie eine andere Version für das Glas von Maven

0
greencheese