V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
helee9199
V2EX  ›  程序员

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

  •  
  •   helee9199 · Dec 9, 2022 · 3616 views
    This topic created in 1236 days ago, the information mentioned may be changed or developed.

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

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

    或者代理对象被序列化,反序列化之后出现的问题
    helee9199
        15
    helee9199  
    OP
       Dec 12, 2022
    @night98 额 因为 win 下正常 mac 下不行 ,我以为是非 oracle jdk 的问题, m1 芯片目前也就 17 有 oracle 的。
    helee9199
        16
    helee9199  
    OP
       Dec 12, 2022
    @retrocode 其实对我们来说 8 11 或者 17 只要不是 6.就没啥区别。
    helee9199
        17
    helee9199  
    OP
       Dec 12, 2022
    @cnzjl
    @lei2j
    恩 我是想表达 这里 getpropties 报红。但是下面实际上是有 propties 的值的
    alt+u 的话 getpropties 也是有返回值的,但是不知道为何程序就是会报无此方法。
    还有就是比较重要的一点是 我前面提了 win 下正常 mac 下有问题, 所以我怀疑是芯片 或者是 jdk 存在什么差异
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5390 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 75ms · UTC 07:51 · PVG 15:51 · LAX 00:51 · JFK 03:51
    ♥ Do have faith in what you're doing.