-
Notifications
You must be signed in to change notification settings - Fork 478
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Xjar启动异常:尚不支持新的Java类文件版本 #133
Comments
@choubuzhaole 遇到和你一样的问题,你有解决这个吗? |
没有,准备转移到 graalvm 了,看着这个项目都没有人维护了 |
|
|
有没有更好的还在维护的项目,老外有没有开发过类似的,github搜了一圈居然没有... |
这是因为SpringBoot启动时要扫描组件, Spring升级到6之后,没有使用到自定义的 URLStreamHandler,即:XBootURLHandler.java,在看 spring-core 里面有个 UrlResource,里面的 createRelativeURL 方法有调整,这个方法最后一行return 那里由 new URL(this.url, relativePath) 调整为了 ResourceUtils.toRelativeURL(this.url, relativePath),就是这一段导致加载class时没有找到自定义 URLStreamHandler 处理器,所以也就没法解密class,然后就报错:Caused by: java.lang.IllegalArgumentException: Unsupported class file major version xxx。 有兴趣可以点到 URL 这个类的源码里面看看,有一段代码是这样写的,context 相当于这个class的父级,SpringBoot3.2.0版本 中,由于这个context为null,导致handle没有进行赋值,在SpringBoot2.x的版本中是有值的,且这个handle就是自定义 URLStreamHandler 处理器,context将自身的handle传递给到了所需要加载的class,所以能成功解密。
有一个方法可以解决,那就是修改 spring-core的源码,将UrlResource.createRelativeURL 方法中的 ResourceUtils.toRelativeURL(this.url, relativePath) 改为 new URL(this.url, relativePath) ,重新编译安装spring-core 到本地仓库即可 |
大佬,有编译好的吗?我也遇到这个问题了 |
改.zip为.jar,自己用一下就行了,毕竟没有测试过,不清楚会不会有其他未知的问题 |
|
请问有找到什么替代方案吗 |
官方找到了一个修复方法:spring-projects/spring-framework#33561 |
ResourceUtils.toURL(root.tostring()).equals(root)会一直返回true,并不能解决 |
看老大一直不解决。 |
拉取了新分支,支持springboot3 |
找到其他的工具了吗?推荐推荐啊 |
spring-core:6.1.14 官方已修复,可以解密了 |
spring-boot:3.3.5已经用上spring-core:6.1.14了,可以用这个版本来试一试 |
springboot 升级到 3.2.0 后 xjar 启动失败,原jar 包能正常运行。
错误信息如下:
The text was updated successfully, but these errors were encountered: