Springboot: Failed to get nested archive for entry BOOT-INF/lib/ & Zip64 archives are not supported

1. 背景

在这里插入图片描述
做程序,用了apache hadoop和 apache spark 的相关jar包,然后因为用apache的能跑,正常运行,启动我的cheetah-bootstrap,但是我觉得不是和CDH版本一致,可能会造成问题,于是我修改了版本,去再次跑一下试试

<hadoop.version>2.6.0-cdh5.15.2</hadoop.version>
<hadoop-client.version
PS D:\ucbb_third_jars\kfq_jars4&gt; java -jar ucbb-third-UCBB-1.3.0-SNAPSHOT.jar Exception in thread &quot;main&quot; java.lang.IllegalStateException: Failed to get nested archive for entry BOOT-INF/lib/META-INF/MANIFEST.MF at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:113) at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchives(JarFileArchive.java:87) at org.springframework.boot.loader.ExecutableArchiveLauncher.getClassPathArchives(ExecutableArchiveLauncher.java:69) at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52) Caused by: java.io.IOException: Unable to open nested jar file &#39;BOOT-INF/lib/META-INF/MANIFEST.MF&#39; at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:261) at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:247) at org.springframework.boot.loader.archive.JarFileArchive.getNestedArchive(JarFileArchive.java:109) ... 4 more Caused by: java.io.IOException: Unable to find ZIP central directory records after reading 857 bytes at org.springframework.boot.loader.jar.CentralDirectoryEndRecord.&lt;init&gt;(CentralDirectoryEndRecord.java:70) at org.springframework.boot.loader.jar.CentralDirectoryParser.parse(CentralDirectoryParser.java:51) at org.springframework.boot.loader.jar.JarFile.&lt;init&gt;(JarFile.java:127) at org.springframework.boot.loader.jar.JarFile.&lt;init&gt;(JarFile.java:114) at org.springframework.boot.loader.jar.JarFile.createJarFileFromFileEntry(JarFile.java:292) at org.springframework.boot.loader.jar.JarFile.createJarFileFromEntry(JarFile.java:269) at org.springframework.boot.loader.jar.JarFile.getNestedJarFile(JarFile.java:258)
最新发布
04-04
&lt;think&gt;好的,我现在需要帮助用户解决Spring Boot应用运行时出现的&#39;Failed to get nested archive for entry BOOT-INF/lib/META-INF/MANIFEST.MF&#39;异常。首先,我得理解这个错误的原因。根据用户提供的引用内容,Spring Boot的spring-boot-loader模块负责处理可执行的jar和war文件。当应用运行时,它会尝试从BOOT-INF/lib目录下的依赖jar中加载资源,如果在这个过程中找不到或无法访问某个jar的MANIFEST.MF文件,就会抛出这个异常。 接下来,我需要考虑可能的原因。首先,可能是构建的jar文件损坏或不完整。用户可能使用了Maven或Gradle插件,但构建过程中可能被中断,导致jar文件不完整。另外,依赖的jar文件可能存在问题,比如在BOOT-INF/lib中的某些jar文件缺失或损坏。还有可能是文件权限问题,导致无法读取这些jar文件。此外,Spring Boot版本过旧或存在bug也可能引发此类问题。 然后,我需要给出解决方案的步骤。第一步是清理并重新构建项目,确保生成的jar文件完整。用户可以删除旧的构建文件,重新运行mvn clean package或gradle clean build。第二步是检查依赖是否完整,查看BOOT-INF/lib目录下的jar文件是否存在异常,比如大小异常或无法解压。第三步是验证MANIFEST.MF文件是否存在,可能在构建过程中某些插件配置导致文件缺失。第四步是升级Spring Boot版本,特别是当使用较旧版本时,可能存在已知的问题。第五步是检查文件权限,确保应用有权限读取这些jar文件。最后,如果问题依旧,可以尝试手动解压jar文件,检查内部结构是否正确。 最后,我需要生成相关问题,帮助用户进一步理解相关知识点。比如关于可执行jar的结构、依赖管理的最佳实践、如何调试类加载问题,以及常见构建问题的解决方法。&lt;/think&gt;### 问题分析 异常`java.lang.IllegalStateException: Unable to open nested jar file BOOT-INF/lib/META-INF/MANIFEST.MF`通常与Spring Boot的可执行JAR包结构或依赖加载机制相关[^1]。可能原因包括: 1. **JAR包损坏**:构建过程中生成的可执行JAR文件不完整或损坏 2. **依赖冲突**:`BOOT-INF/lib`目录下的依赖JAR文件缺失或无法访问 3. **文件权限问题**:操作系统权限限制导致无法读取嵌套JAR 4. **Spring Boot版本问题**:旧版本存在已知的类加载器缺陷 ### 解决方案 #### 1. 清理并重新构建项目 ```bash # Maven项目 mvn clean package # Gradle项目 gradle clean build ``` 重新生成可执行JAR后检查文件大小是否合理(通常应大于1MB) #### 2. 检查依赖完整性 解压JAR文件验证依赖: ```bash unzip -l your-app.jar | grep BOOT-INF/lib ``` 检查输出中是否存在`0字节`文件或明显异常的依赖项 #### 3. 验证MANIFEST.MF文件 检查主清单文件配置: ```bash unzip -p your-app.jar META-INF/MANIFEST.MF ``` 应包含关键属性: ``` Main-Class: org.springframework.boot.loader.JarLauncher Start-Class: com.example.YourApplication ``` #### 4. 升级Spring Boot版本 在`pom.xml`/`build.gradle`中更新至最新稳定版: ```xml &lt;!-- Maven示例 --&gt; &lt;parent&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-parent&lt;/artifactId&gt; &lt;version&gt;3.2.4&lt;/version&gt; &lt;/parent&gt; ``` #### 5. 检查文件系统权限 ```bash # Linux/Mac系统 chmod 755 your-app.jar # Windows系统需确保JAR文件未锁定 ``` ### 技术原理 Spring Boot的可执行JAR采用特殊结构: $$ \boxed{ \begin{aligned} &amp;\text{your-app.jar}\\ &amp;\quad|- \text{BOOT-INF}\\ &amp;\qquad|- \text{classes} \quad\quad\ \ \text{(应用类文件)}\\ &amp;\qquad|- \text{lib} \quad\quad\quad\quad\ \ \text{(依赖JAR)}\\ &amp;\quad|- \text{org/springframework/boot/loader} \ \text{(启动器类)} \end{aligned} } $$ 当`JarLauncher`尝试加载嵌套JAR时,若发现无效的ZIP条目或损坏的文件结构,就会抛出该异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九师兄

你的鼓励是我做大写作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值