部署Maven项目抛出java.util.zip.ZipException:无效的LOC头(错误的签名)

Kar*_*ick 156 deployment jar java-ee maven

当我运行我时,我得到以下异常mvn install.我甚至删除了本地存储库并再次运行获得相同的异常.

[错误]无法执行目标org.apache.maven.plugins:maven-shade-plugin:2.1:项目核心上的阴影(默认) - 批处理:创建阴影jar时出错:无效的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>
Run Code Online (Sandbox Code Playgroud)

错误:

[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
Run Code Online (Sandbox Code Playgroud)

Siv*_*and 205

jar文件可能已损坏.尝试删除以下文件夹的内容:

 C:\Users\[username]\.m2\repository
Run Code Online (Sandbox Code Playgroud)

然后右键单击您的项目,选择Maven,更新项目,选中强制更新快照/版本.

  • 这应该标记为解决方案.我相信这也是其他一些没有答案的相关问题的解决方案.谢谢湿婆! (4认同)
  • 这有效,但删除整个maven本地存储库不是最佳选择.只需删除相关的jar文件即可. (4认同)
  • 不必删除所有依赖项,在顶部可以找到哪个依赖项的LOC标头不正确。 (2认同)
  • 只是要注意一个明显的事实:当有人在Gradle构建中遇到“无效的LOC标头”时,您只需删除“〜/ .gradle / caches”文件夹(Linux)。 (2认同)

Mat*_*iao 107

主要问题是腐败的罐子.

要查找损坏的版本,需要在Eclipse的Breakpoints视图中添加Java Exception Breakpoint,或者在首选IDE中选择 java.util.zip.ZipException该类,然后重新启动Tomcat实例.

当JVM在ZipException断点处挂起时,您必须进入 JarFile.getManifestFromReference()堆栈跟踪,并检查属性name以查看文件名.

之后,您应该从文件系统中删除该文件,然后右键单击您的项目,选择Maven,更新项目,选中强制更新快照/版本.

  • rm -rf .m2 =有效 (11认同)
  • 我相信这应该是公认的答案.简单地删除数百个jar文件并重新下载它们不是一个有效的解决方案. (10认同)
  • 很棒的技术!我找不到JarFile框架,但是在ZipFile $ ZipFileInputStream.read框架中找到了它作为ZipFile.this.name的表达式. (3认同)
  • 那里有很棒的调试技术.使我免于浪费带宽来下载整个依赖项或工件.谢谢. (2认同)
  • 这个损坏的罐子的简单例子:/sf/answers/3263660361/花了2个小时来了解问题所在.顺便说一下,只删除相关的jar文件就足够了,而不是清除整个maven本地缓存. (2认同)

alo*_*lok 72

你需要检查哪个罐子有问题.它必须被破坏.删除该jar并mvn spring-boot:run再次运行命令.可能更多的是一个jar已经损坏所以每次你需要运行该命令来删除该jar.在我的情况下,mysql,jackson,aspect jars已损坏mvn spring-boot:run命令3次,我弄清楚这个并从.m2文件夹中删除了jar .现在问题已经解决了.


Jav*_*ier 39

gsitgithub/find-currupt-jars.txt,以下命令列出了存储库中所有损坏的jar文件:

find  /home/me/.m2/repository/ -name "*jar" | xargs -L 1 zip -T | grep error | grep invalid
Run Code Online (Sandbox Code Playgroud)

您可以删除损坏的jar文件,并重新编译该项目.

示例输出:

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)
Run Code Online (Sandbox Code Playgroud)

  • 你是最好的,MAN! (2认同)
  • 绝对是很好的答案,删除 .m2 中的数千个库会损失很多。谢谢 (2认同)

sam*_*amm 9

我想给我的练习.

使用您喜欢的IDE,例如在这里采用eclipse:

  1. 在异常堆栈中查找适当的位置
  2. 设置条件断点
  3. 调试它
  4. 它将在异常之前打印损坏的jar

在此输入图像描述


Chr*_*now 5

对我来说,解决办法是运行mvn-X:

$ mvn package -X
Run Code Online (Sandbox Code Playgroud)

然后向后看输出,直到看到失败然后继续,直到你看到mvn试图处理的最后一个jar文件:

...
... <<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)
Run Code Online (Sandbox Code Playgroud)

查看失败前的最后一个jar,然后从本地存储库中删除它,即

$ rm -rf /Users/snowch/.m2/repository/org/eclipse/jetty/jetty-server/9.2.15.v20160210/
Run Code Online (Sandbox Code Playgroud)