SBT Assembly生成Jar中Class文件魔数异常(0xEFBFBD替代0xCAFEBABE)
问题描述
环境信息
| 工具 | 版本 |
|---|---|
| OS | Win10 |
| JavaJDK | 11 |
| Scala | 2.13.5 |
| SBT | 1.3.13 |
| Assembly | 2.1.0 |
1. 错误现象
在sbt shell执行assembly命令显示[success],但使用java -jar MyProject.jar运行生成的Jar文件时,出现如下错误:
java.lang.ClassFormatError: Incompatible magic value 4022320623 in class file Main
2. Class文件异常细节
解压Jar包后发现,所有.class文件均以0xEFBFBD EFBFBD开头(该字符无法被UTF-8识别);而sbt package生成的Class文件均以标准魔数0xCAFE BABE开头。对比二进制内容,两者大部分一致,但Assembly生成的文件中存在多处0xEFBFBD。
3. 已尝试的配置
尝试将多模块大型项目打包为单个Jar文件,已做如下编码配置:
- IDEA全局/项目编码均设置为
UTF-8 - SBT的VM参数添加
-Dfile.encoding=UTF-8 - build.sbt中配置
javaOptions ++= Seq("-encoding", "UTF-8")
已尽可能确保所有文件以UTF-8编码解码。
4. 组件版本测试情况
尝试过sbt-assembly的2.1.1和2.0.0版本,结果一致;由于需要自定义2.0.0版本后支持的Merge Strategy,未测试更早版本。
注:因权限限制无法展示代码,若需更多信息可告知。
内容的提问来源于stack exchange,提问作者Bean
相关产品推荐
相关产品推荐

