V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
helee9199
V2EX  ›  程序员

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

  •  
  •   helee9199 · 2022-12-09 19:54:27 +08:00 · 2733 次点击
    这是一个创建于 714 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 下就跑不起来 。
    愁唉。

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

    或者代理对象被序列化,反序列化之后出现的问题
    helee9199
        15
    helee9199  
    OP
       2022-12-12 14:11:35 +08:00
    @night98 额 因为 win 下正常 mac 下不行 ,我以为是非 oracle jdk 的问题, m1 芯片目前也就 17 有 oracle 的。
    helee9199
        16
    helee9199  
    OP
       2022-12-12 14:12:17 +08:00
    @retrocode 其实对我们来说 8 11 或者 17 只要不是 6.就没啥区别。
    helee9199
        17
    helee9199  
    OP
       2022-12-12 14:14:10 +08:00
    @cnzjl
    @lei2j
    恩 我是想表达 这里 getpropties 报红。但是下面实际上是有 propties 的值的
    alt+u 的话 getpropties 也是有返回值的,但是不知道为何程序就是会报无此方法。
    还有就是比较重要的一点是 我前面提了 win 下正常 mac 下有问题, 所以我怀疑是芯片 或者是 jdk 存在什么差异
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2451 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:40 · PVG 23:40 · LAX 07:40 · JFK 10:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.