web-dev-qa-db-fra.com

Le déploiement du projet Maven lève Java.util.Zip.ZipException: en-tête de LOC non valide (signature incorrecte)

Je reçois l'exception ci-dessous lorsque je lance mon mvn install. J'ai même supprimé le référentiel local et ai couru à nouveau avec la même exception.

[ERREUR] Impossible d'exécuter l'objectif org.Apache.maven.plugins: maven-shade-plugin: 2.1: shade (défaut) sur le projet core-batch: Erreur lors de la création du fichier jar ombré: en-tête LOC invalide (signature incorrecte) -> [Aide 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>

Erreur:

[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

Vous devez vérifier quel bocal pose problème. Il doit être corrompu. Supprimez ce fichier et exécutez à nouveau la commande mvn spring-boot:run. Peut-être plus d'un fichier JAR a-t-il été corrompu, vous devez donc exécuter cette commande à chaque fois pour supprimer ce fichier JAR. Dans mon cas, mysql, jackson, les fichiers d’aspect étaient corrompus 3 fois la commande mvn spring-boot:run et j’en ai déduit que j’ai supprimé les fichiers jar du dossier .m2. Maintenant, le problème est résolu.

70
alok

Le fichier JAR est peut-être corrompu. Essayez de supprimer le contenu du dossier suivant:

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

Cliquez ensuite avec le bouton droit de la souris sur votre projet, sélectionnez Maven, Mettre à jour le projet, puis cochez Forcer la mise à jour des instantanés/des versions.

203
Siva Anand

Le principal problème sont les pots endommagés.

Pour rechercher le fichier endommagé, vous devez ajouter un point d'arrêt d'exception Java dans la vue Points d'arrêt d'Eclipse ou votre environnement de développement préféré, sélectionnez la classe Java.util.Zip.ZipException et redémarrez l'instance de Tomcat.

Lorsque la machine virtuelle Java est suspendue à ZipException point d'arrêt, vous devez accéder à JarFile.getManifestFromReference() dans le suivi de la pile et vérifier l'attribut name pour voir le nom du fichier.

Après cela, vous devez supprimer le fichier du système de fichiers, puis cliquer avec le bouton droit de la souris sur votre projet, sélectionner Maven, Mettre à jour le projet, puis vérifier l’option Force Update of Snapshots/Releases.

107
Matias Sebastiao

De gsitgithub/find-currupt-jars.txt , la commande suivante répertorie tous les fichiers jar corrompus du référentiel:

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

Vous pouvez supprimer les fichiers JAR corrompus et recompiler le projet.

Exemple de sortie:

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

Je voudrais donner mon donner ma pratique.

Utilisez votre IDE préféré, prenez Eclipse par exemple ici:

  1. Trouver un emplacement approprié dans la pile d'exceptions
  2. Définir un point d'arrêt conditionnel
  3. Le déboguer
  4. Il imprimera le pot corrompu avant exception

enter image description here

9
samm

La solution pour moi était de lancer mvn avec -X:

$ mvn package -X

Ensuite, regardez en arrière dans la sortie jusqu'à voir l'échec, puis continuez jusqu'à ce que vous voyiez le dernier fichier jar que mvn a essayé de traiter:

...
... <<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)

Examinez le dernier fichier jar avant sa défaillance et supprimez-le du référentiel local, c.-à-d.

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

Cela ressemble à un problème de configuration pour le compilateur maven dans votre fichier pom. La version par défaut Java source et cible est 1.5, même le JDK utilisé a une version plus récente.

Pour résoudre ce problème, ajoutez la section de configuration du plug-in maven compiler avec la version Java supérieure, exemple:

<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>

Pour plus d'informations, consultez ces liens:

compilateur maven

rapport de bug

2
harvyS

Cette réponse ne concerne pas les gars de DevOps/administrateur système, mais ceux qui utilisent IDE comme Eclipse et qui font face à un problème de invalid LOC header (bad signature).

Vous pouvez forcer la mise à jour des dépendances maven, comme suit:

enter image description here

enter image description here

1
Vishrant

Nous pouvons forcer la validation de la somme de contrôle dans maven avec au moins deux options:

1.Ajouter le --strict-checksums à notre commande maven.

2.Ajoutez la configuration suivante à notre fichier de paramètres maven:

<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>

Plus de détails dans cet article: https://dzone.com/articles/maven-artifact-checksums-what

1
SHoko

Au-delà de la suppression de .m2/repository, supprimez l'application du serveur, exécutez le serveur (sans applications), arrêtez-le et ajoutez à nouveau l'application. Maintenant, c'est censé fonctionner. Pour une raison quelconque, le simple fait de nettoyer les dossiers du serveur de l'interface n'a pas le même effet.

0
Alex

Cela est principalement dû à maven.Si vous utilisez IDEA, suivez ces étapes:

1. Utilisez IDEA pour exécuter "maven clean", vous verrez alors

 [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.

remplacer le mauvais pot

2. utilisez IDEA pour exécuter "maven compile", vous verrez alors

[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 个错误

résoudre le mauvais pot

alors le problème sera résolu.

0
Qin Kai

la plupart du temps, cela se produit car les zars corrompus mettant à jour l'URL du référentiel central maven dans le fichier pom.xml ont résolu mon problème. Vous pouvez utiliser cette URL https://repo.maven.Apache.org/maven2/ = mais avant cela, supprimez les fichiers du répertoire .m2, espérons que cela vous aidera

0
techasutos

"Gestionnaire de LOC invalide (signature incorrecte)"
Cela est probablement dû à la corruption des fichiers JAR téléchargés par Maven. Solution rapide, je recommande de sauvegarder le répertoire . M2/repository et supprimer . m2/repository , puis effectuez une reconstruction ou une mise à jour Maven.

0
Shivdas

Construisez le projet avec l'option "-e -X" pour trouver le fichier jar corrompu et retirez le fichier jar du référentiel local.

0
Ajeesh

Je faisais face à ce problème en déployant mon oreille sur mon instance locale weblogic. Effacer le référentiel local et reconstruire l'oreille a résolu le problème pour moi.

0
SMT_Dev

Voici un petit détecteur écrit en Java, il suffit de copier et d'exécuter :)

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;
    }

}

Sortie

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

Cela peut être dû à plusieurs raisons:

1: Essayez de changer votre version de Web.XML

2: Le pot que vous essayez d'utiliser peut être corrompu. Par exemple: utilisez une version différente pour le pot de Maven

0
greencheese