Java 项目升级 碰到一个奇怪的问题。(hibernate)

2022-12-09 19:54:27 +08:00
 helee9199

java 1.6 的 ie 项目 终于升级 1.8 chrome 了。
搞了半天升级 spring hibernate 等相关配置,终于把项目跑起来了。
可是回到家,用 mac 电脑却跑不起来。
报 java.lang.NoSuchMethodError: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Map;
又远程回公司的 win 电脑 跑起来没问题。
就邪门了 和底层 jdk 有关么?
mac 是 m1 芯片 用的 zulu openjdk8
搜这个报错 说是升级 hibernate 就好了
可是我就是升级到 5.6.9 了
且 win 下是好的 mac 下就跑不起来 。
愁唉。

2773 次点击
所在节点    程序员
17 条回复
xuhaoyangx
2022-12-09 20:08:10 +08:00
jdk 1.8 直接用 Intel 的,转译使用
helee9199
2022-12-09 20:58:29 +08:00
@xuhaoyangx 还能这样么?
不过我刚刚想排除一下第三方 jdk 的问题,安装了 oracle 的 jdk17 发现还是一样报错
可能真得是 m1 芯片的问题吧
jorneyr
2022-12-09 20:58:41 +08:00
有些类在 Windows 上 JDK8 有,在 Mac zulu JDK8 没有,我也遇到过,例如 javafx.util.Pair 这个类没有。
helee9199
2022-12-09 21:09:17 +08:00
@jorneyr 我尝试用 oracle 的 jdk17 没想到 也是不行。。。
Hurriance
2022-12-09 23:11:20 +08:00
用 Oracle 的 jdk1.8 也不行吗
night98
2022-12-10 03:03:52 +08:00
用 oracle 的 jdk17 ????? jdk9 干掉了一堆类,jdk17 就更别说了
kran
2022-12-10 05:44:48 +08:00
尝试在无错环境看一下入参的实际类型
zeni123
2022-12-10 07:33:17 +08:00
NoSuchMethodError 看看这个 SessionFactoryImplementor 类有没有 getProperties()Ljava/util/Map;这个方法
cnzjl
2022-12-10 08:27:52 +08:00
你 debug 图中的类和异常信息的类不一致呀
sinibazhang
2022-12-10 10:37:22 +08:00
@jorneyr zulu jdk 应该是有 javafx 版本的
lei2j
2022-12-10 11:57:07 +08:00
debug 图与描述不太相关啊,不是应该看 SessionFactoryImplementor 有没有 getProperties 方法吗,项目中搜索这个类及对应方法再看看有没有
retrocode
2022-12-10 11:59:55 +08:00
恭喜升级, 要不考虑更进一步升个 JDK11?
hqs0417
2022-12-10 14:04:42 +08:00
这种问题一般是 jar 包冲突,也就是一个类在存在多个 jar 。
类加载器在 windows ,linux ,mac 由于文件系统不同,加载顺序不同,可能在 linux 下可以工作,但是在 mac 下无法正常工作。
排查思路,找 org.hibernate.engine.spi.SessionFactoryImplementor 是否存在多个 jar 中,应该一个有该方法一个没有。排掉哪个
Macolor21
2022-12-12 08:47:05 +08:00
NoXxxFound 一般是依赖冲突,window 没更新可能是依赖没更新,mvn clean 再 package 试下。

或者代理对象被序列化,反序列化之后出现的问题
helee9199
2022-12-12 14:11:35 +08:00
@night98 额 因为 win 下正常 mac 下不行 ,我以为是非 oracle jdk 的问题, m1 芯片目前也就 17 有 oracle 的。
helee9199
2022-12-12 14:12:17 +08:00
@retrocode 其实对我们来说 8 11 或者 17 只要不是 6.就没啥区别。
helee9199
2022-12-12 14:14:10 +08:00
@cnzjl
@lei2j
恩 我是想表达 这里 getpropties 报红。但是下面实际上是有 propties 的值的
alt+u 的话 getpropties 也是有返回值的,但是不知道为何程序就是会报无此方法。
还有就是比较重要的一点是 我前面提了 win 下正常 mac 下有问题, 所以我怀疑是芯片 或者是 jdk 存在什么差异

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/901422

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX