【发布时间】:2019-08-10 13:14:56
【问题描述】:
我正在使用 spring-boot-maven-plugin:2.1.0.RELEASE 来打包我的主线应用程序。此应用程序已打包所有常见的依赖项等
在一个单独的项目中,我正在使用 maven-shade-plugin:2.4.3 构建一个阴影 jar,并使用 org.codehaus.mojo:truezip-maven-plugin 在 BOOT-INF/lib 目录下注入我的 Spring Boot 应用程序:1.1。现在,当我启动我的 spring-boot 应用程序时,我遇到了以下异常;
ingester_1 | Listening for transport dt_socket at address: 40500
ingester_1 | Exception in thread "main" java.lang.IllegalStateException: Failed to get nested archive for entry BOOT-INF/lib/ms-holdings-package-docker-DEV.0.0-SNAPSHOT.jar
ingester_1 | at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:108)
ingester_1 | at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:86)
ingester_1 | at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(ExecutableArchiveLauncher.java:70)
ingester_1 | at org.springframework.boot.loader.Launcher.launch(Launcher.java:49)
ingester_1 | at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
ingester_1 | Caused by: java.io.IOException: Unable to open nested jar file 'BOOT-INF/lib/ms-holdings-package-docker-DEV.0.0-SNAPSHOT.jar'
ingester_1 | at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:256)
ingester_1 | at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:241)
ingester_1 | at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:103)
ingester_1 | ... 4 more
ingester_1 | Caused by: java.lang.IllegalStateException: Unable to open nested entry 'BOOT-INF/lib/ms-holdings-package-docker-DEV.0.0-SNAPSHOT.jar'. It has been compressed and nested jar files must be stored without compression. Please check the mechanism used to create your executable jar file
ingester_1 | at org.springframework.boot.loader.jar.JarFile.createJarFileFromFileEntry(JarFile.java:284)
ingester_1 | at org.springframework.boot.loader.jar.JarFile.createJarFileFromEntry(JarFile.java:264)
ingester_1 | at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:252)
ingester_1 | ... 6 more
我试图复制 BOOT-INF/lib 中的 jar,直接取出 maven-truezip-plugin,但还是一样。无论如何我可以解决这个问题吗?或解决方法?
【问题讨论】:
-
仅供参考,我使用
jar -xvf解压有问题的jar 并使用jar -cfm0M...重新打包,将jar 放回spring-boot 应用程序,但没有用。我现在怀疑 spring-boot 有问题! -
正如 discussed on GitHub 一样,您添加的 jar 存储不正确。您是否尝试过进行配置以使其在您的应用程序 jar 中的条目不被压缩?您可以阅读有关此要求的更多信息in the documentation。
-
@AndyWilkinsona 感谢您的链接。这意味着我不能使用 Spring Boot Loader 并且必须使用替代方案!如果文档显示了另一种包装样式示例以及如何将其与 Spring Boot 包装进行比较以使其真正变得简单易用,那将对其他人有所帮助。
标签: spring-boot maven-shade-plugin spring-boot-maven-plugin