1.问题说明
项目部署的时候需要替换 SpringBoot 项目打包好的.jar
文件内lib
下的.jar
文件内的文件,是不是有点儿绕 😄 实际上就是依赖的.jar
文件内的数据。特别注意,这里仅针对压缩工具WinRAR
,一顿操作之后重新部署报错如下,主要是:
java.lang.IllegalStateException: Failed to get nested archive for entry BOOT-INF/lib/xxx-xxx-1.0.0.jar
java.io.IOException: Unable to open nested jar file ‘BOOT-INF/lib/xxx-xxx-1.0.0.jar’
也就是替换之后的文件出现问题了。
Exception in thread "main" java.lang.IllegalStateException: Failed to get nested archive for entry BOOT-INF/lib/xxx-xxx-1.0.0.jar at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:120) at org.springframework.boot.loader.archive.JarFileArchive$NestedArchiveIterator.adapt(JarFileArchive.java:274) at org.springframework.boot.loader.archive.JarFileArchive$NestedArchiveIterator.adapt(JarFileArchive.java:265) at org.springframework.boot.loader.archive.JarFileArchive$AbstractIterator.next(JarFileArchive.java:226) at org.springframework.boot.loader.ExecutableArchiveLauncher.createClassLoader(ExecutableArchiveLauncher.java:87) at org.springframework.boot.loader.Launcher.launch(Launcher.java:55) at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88) Caused by: java.io.IOException: Unable to open nested jar file 'BOOT-INF/lib/xxx-xxx-1.0.0.jar' at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:306) at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:292) at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:116) ... 6 more
2.解决方法
核心是替换jar
包文件时压缩方式要用存储
,解决步骤分为两步:
- 首先要把lib下的jar包拉出来,进行文件替换,压缩方式使用存储;
- 然后将jar包再拉到lib下,压缩方式依然使用存储。
如果直接替换lib下jar包内的文件,即便选择的压缩方式是存储,替换后,由于lib下jar有修改,保存时lib下的jar包会进行一次压缩,此时是默认的压缩方式,并不是存储
,所以会导致问题。