मावेन परियोजना को तैनात करना java.util.zip.ZipException को फेंकता है: अमान्य LOC हेडर (खराब हस्ताक्षर)


164

जब मैं दौड़ता हूं तो मुझे नीचे अपवाद मिल रहा है mvn install। मैंने स्थानीय रिपॉजिटरी को भी डिलीट कर दिया है और फिर से वही अपवाद हो रहा है।

[ERROR] लक्ष्य को निष्पादित करने में विफल रहा। org.apache.maven.plugins: maven-shade-plugin: 2.1: shade (default) प्रोजेक्ट कोर-बैच पर: छायांकित जार बनाने में त्रुटि: अमान्य LOC हैडर (खराब हस्ताक्षर) -> [सहायता 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] 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

1
इस समस्या के लिए एक प्लगइन बनाया -> github.com/goxr3plus/CorruptedJarsDetector
GOXR3PLUS

1
@ GOXR3PLUS वास्तव में उस रेपो (README में कक्षा को छोड़कर) में कोड नहीं है, यहां तक ​​कि मावेन प्लगइन की तुलना में कम है। मुझे लगता है कि एक मावेन प्लगइन सबसे अच्छा समाधान होगा, वास्तव में - या मौजूदा प्लगइन्स में से एक का एक विस्तार जो कुछ ऐसा करने की अनुमति देता है mvn dependencies validate...
Marco13

मार्को रिपॉजिटरी का कोड कक्षा lol :) में एक है :)
GOXR3PLUS

जवाबों:


79

आपको यह जांचने की आवश्यकता है कि कौन सा जार समस्या दे रहा है। इसे दूषित किया जाना चाहिए। उस जार को हटा दें और mvn spring-boot:runफिर से कमांड चलाएँ। अधिक हो सकता है कि एक जार दूषित हो गया है इसलिए हर बार आपको उस जार को हटाने के लिए उस कमांड को चलाने की आवश्यकता होती है। मेरे मामले में mysql, jackson, एस्पेक्ट जार को mvn spring-boot:run3 बार कमांड को भ्रष्ट किया गया था और मैंने यह पता लगाया और .m2फ़ोल्डर से जार को हटा दिया । अब मसला हल हो गया है।


218

जार फ़ाइल दूषित हो सकती है। निम्न फ़ोल्डर की सामग्री को हटाने का प्रयास करें:

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

फिर अपने प्रोजेक्ट पर राइट क्लिक करें, मेवेन, अपडेट प्रोजेक्ट चुनें, स्नैपशॉट / रिलीफ़ के फ़ोर्स अपडेट की जांच करें।


4
इसे समाधान के रूप में चिह्नित किया जाना चाहिए। मेरा मानना ​​है कि यह कई अन्य संबंधित प्रश्नों का भी समाधान है, जिनका कोई जवाब नहीं है। धन्यवाद शिवा!
हैक-आर

1
बहुत अच्छा .. 7 घंटे बिताने के बाद मुझे इसका हल पता चला ...
KUDOS

4
यह काम करता है लेकिन पूरे मावेन लोकल रिपॉजिटरी को हटाना सबसे अच्छा विकल्प नहीं है। बस संबंधित जार फ़ाइलों को हटा दें और यह पर्याप्त है।
लेविट डिविलीग्लू

2
सभी निर्भरताओं को हटाने की आवश्यकता नहीं है, शीर्ष पर आप पा सकते हैं कि किन निर्भरताओं में बुरा LOC हैडर है।
.मर फ़राज

2
बस स्पष्ट नोट करने के लिए: जब invalid LOC headerग्रेडेल में किसी का सामना होता है, तो आप बस ~/.gradle/cachesफ़ोल्डर (लिनक्स) हटाते हैं ।
मार्टिन विसेटीका

110

मुख्य रूप से समस्या दूषित जार हैं।

भ्रष्ट व्यक्ति को खोजने के लिए, आपको एक्लिप्स व्यू ऑफ़ एक्लिप्स, या अपने पसंदीदा आईडीई में जावा एक्सेप्शन ब्रेकप्वाइंट जोड़ने की जरूरत है , java.util.zip.ZipExceptionक्लास का चयन करें , और टॉमकैट इंस्टेंस को पुनरारंभ करें।

जब JVM ZipExceptionब्रेकपॉइंट पर निलंबित हो जाता है तो आपको JarFile.getManifestFromReference()स्टैक ट्रेस में जाना चाहिए , और nameफ़ाइल नाम देखने के लिए विशेषता की जांच करें ।

उसके बाद, आपको फ़ाइल सिस्टम से फ़ाइल को हटाना चाहिए और फिर अपनी परियोजना पर राइट क्लिक करना होगा, मावेन, अपडेट प्रोजेक्ट का चयन करना होगा, स्नैपशॉट / रिले के फोर्स अपडेट पर जांच करनी चाहिए।


11
मेरा मानना ​​है कि यह स्वीकृत उत्तर होना चाहिए। बस सैकड़ों जार फ़ाइलों को हटाने और उन्हें फिर से डाउनलोड करना एक कुशल समाधान नहीं है।
मोहसिन

11
rm -rf .m2 = प्रभावी
Jeryl कुक

2
वहाँ बहुत बढ़िया डिबगिंग तकनीक। मुझे पूरी निर्भरता या कलाकृतियों को डाउनलोड करने के लिए बैंडविड्थ को बर्बाद करने से बचाया। धन्यवाद।
थारिक नुगरोतोमो

3
महान तकनीक। मुझे JarFile फ्रेम नहीं मिला, लेकिन यहाँ इसे ZipFile $ ZipFileInputStream.read फ्रेम पर ZipFile.this.name अभिव्यक्ति के रूप में मिला।
rlpatrao

2
इस भ्रष्ट जार का एक सरल उदाहरण: stackoverflow.com/a/46623719/3128926 2 घंटे समझें कि समस्या क्या है। Btw, केवल संबंधित जार फ़ाइलों को हटाने पूरे मावेन स्थानीय कैश को साफ़ करने के बजाय पर्याप्त हैं।
लेवेंट डिविलीग्लू

41

से gsitgithub / लगता है-currupt-jars.txt , निम्न आदेश सूचियों सभी भंडार में भ्रष्ट जार फाइलें:

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

आप दूषित जार फ़ाइलों को हटा सकते हैं, और प्रोजेक्ट को फिर से शुरू कर सकते हैं।

उदाहरण आउटपुट:

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)

1
sudo find ./repository/ -name "*jar" | sudo xargs -L 1 zip -T | grep error | grep invalid मुझे देता है xargs: zip: No such file or directory। यह खिड़कियों पर
उबंटू

1
@ liltitus27 इस कमांड लाइन के zip -Tतहत प्रत्येक जार पर निष्पादन (परीक्षण) किया जाता है repository, फिर जो जार अमान्य संपीड़ित फ़ाइलों को फ़िल्टर करते हैं। क्या आपके पास zipकमांड उपलब्ध है?
जेवियर

ऐसा लगता है कि बैश में, मेरे पास जिप स्थापित नहीं है। मुझे पता चला कि आपके द्वारा पोस्ट की गई सटीक कमांड सुंदर रूप से साइबरविन में काम करती है। और यह भी, यह बुरा जार खोजने में काम किया, धन्यवाद!
liltitus27

2
आप सबसे अच्छे हैं, आदमी!
इगोर मास्टर्नॉय

के zip -Tतहत संग्रहीत प्रत्येक जार पर चलाने के लिए विचार है.m2/repository । विंडोज में, आप इसे सिगविन ( /cygdrive/C/Users/torno/.m2/repository) पर चला सकते हैं जैसा मैंने किया था, और मुझे लगता है कि आप इसे बैश के साथ विंडोज 10 ( /mnt/c/Users/torno/.m2/repository) पर भी चला सकते हैं । मैंने यह जांच नहीं की कि PowerShell के साथ एक समान स्क्रिप्ट कैसे लिखी जाए, और मुझे लगता है कि इसे cmd प्रॉम्प्ट के साथ संभव नहीं होना चाहिए।
जेवियर

11

मैं अपना अभ्यास देना चाहूंगा।

अपने पसंदीदा IDE का उपयोग करें, उदाहरण के लिए ग्रहण करें:

  1. अपवाद स्टैक के भीतर एक उपयुक्त स्थान खोजें
  2. सशर्त विराम बिंदु सेट करें
  3. इसे डिबग करें
  4. यह अपवाद से पहले दूषित जार को प्रिंट करेगा

यहां छवि विवरण दर्ज करें


1
यह एक बेहतर समाधान है जो पूरे एम 2 रिपॉजिटरी को साफ करता है, जो मेरे मामले में फिर से डाउनलोड करने के लिए उम्र ले जाएगा।
मार्टिन कैसिडी

5

मेरे लिए समाधान के mvnसाथ चलना था -X:

$ mvn package -X

फिर आउटपुट के माध्यम से पीछे की ओर देखें जब तक आप असफलता नहीं देखते हैं और तब तक चलते रहेंगे जब तक कि आप अंतिम जार फ़ाइल नहीं देखते हैं जो mvan ने संसाधित करने की कोशिश की है:

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

अंतिम जार को देखने से पहले इसे विफल कर दिया और स्थानीय भंडार से हटा दें, अर्थात

$ rm -rf /Users/snowch/.m2/repository/org/eclipse/jetty/jetty-server/9.2.15.v20160210/

2

आपकी pom फ़ाइल में maven संकलक के लिए कॉन्फ़िगरेशन की समस्या दिखती है। डिफ़ॉल्ट संस्करण जावा स्रोत और लक्ष्य 1.5 है, यहां तक ​​कि JDK का उच्च संस्करण है।

ठीक करने के लिए, उच्च जावा संस्करण के साथ मावेन कंपाइलर प्लगइन कॉन्फ़िगरेशन अनुभाग जोड़ें, उदाहरण:

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

अधिक जानकारी के लिए इन लिंक की जाँच करें:

मावेन संकलक

बग रिपोर्ट


1

यह उत्तर DevOps / प्रणाली व्यवस्थापक लोगों के लिए नहीं है, लेकिन उनके लिए जो ग्रहण और सामना की तरह IDE का उपयोग कर रहे हैं invalid LOC header (bad signature)

आप मावेन निर्भरता को अद्यतन कर सकते हैं, इस प्रकार है:

यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें


1

यहाँ जावा में लिखा गया एक छोटा सा डिटेक्टर है, बस कॉपी करें और चलाएं :)

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

}

उत्पादन

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)

1

हम कम से कम दो विकल्पों के साथ मावेन में चेकसम सत्यापन को बाध्य कर सकते हैं:

1. ऐड करना --strict-checksums हमारे maven कमांड में शामिल होना।

2. हमारे मावेन सेटिंग्स फ़ाइल में निम्नलिखित विन्यास को जोड़ना:

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

इस पोस्ट में अधिक जानकारी: https://dzone.com/articles/maven-artifact-checksums-what


0

हटाने से परे .m2 / रिपॉजिटरी, सर्वर से एप्लिकेशन हटाएं, सर्वर चलाएं (एप्लिकेशन के बिना), इसे रोकें और फिर से एप्लिकेशन जोड़ें। अब यह काम करना है। किसी कारण से इंटरफ़ेस से सर्वर फ़ोल्डर्स को साफ करने का एक ही प्रभाव नहीं होता है।


0

मैं अपने स्थानीय वेबलॉग उदाहरण के लिए अपने कान को तैनात करते समय इस मुद्दे का सामना कर रहा था। स्थानीय रिपॉजिटरी को साफ़ करना और कान का निर्माण फिर से मेरे लिए समस्या का समाधान हो गया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.