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

两个 jar 包反编译对比相同,运行结果不同

  •  
  •   UpSally · 2020-05-15 10:05:31 +08:00 via Android · 6052 次点击
    这是一个创建于 1638 天前的主题,其中的信息可能已经有所发展或是发生改变。
    同样的工程代码,分别在本地环境和测试环境用同样的命令打包,用 idea 的 diff 工具对比两个 jar,反编译内容一样,将两个 jar 在本地用同样的命令运行,测试环境的生成 jar 包运行时实现 ApplicationContextAware 的工具类获取 bean 的时候报空指针,本地生成的 jar 运行不会报异常。将两个 jar 在测试环境运行,测试环境生成的 jar 运行实现。。。的工具类。。会报空指针,本地生成的 jar 运行不报异常。
    16 条回复    2020-05-17 00:20:12 +08:00
    GM
        1
    GM  
       2020-05-15 10:16:40 +08:00
    配置文件也一模一样吗?
    GM
        2
    GM  
       2020-05-15 10:17:37 +08:00
    java 几的?用到 module 没有,两个 jar 导出的 modules 等等东西也一模一样吗?
    C603H6r18Q1mSP9N
        3
    C603H6r18Q1mSP9N  
       2020-05-15 10:34:43 +08:00
    类似相同代码链接不同的数据库产生的结果就不一样
    是吧,数据库环境系统版本这些都是可能变量,代码不会骗人
    huntcool001
        4
    huntcool001  
       2020-05-15 10:38:55 +08:00
    JDK 版本,环境变量 ,pom 文件都看看
    UpSally
        5
    UpSally  
    OP
       2020-05-15 11:11:08 +08:00
    @GM 同样的构建命令,同样的运行命令,配置文件,pom.xml 文件都是一样
    UpSally
        6
    UpSally  
    OP
       2020-05-15 11:12:30 +08:00
    @huntcool001 测试环境 jdk:1.8.0_211, 本地环境 jdk: 1.8.0_241, pom.xml 文件比对一样
    UpSally
        7
    UpSally  
    OP
       2020-05-15 11:15:09 +08:00
    @shanghai1998 本地环境和测试环境打的包,都放在测试环境原型,运行命令指定同样的配置文件,使用的是相同的数据库
    huntcool001
        8
    huntcool001  
       2020-05-15 11:20:56 +08:00
    @UpSally 本地环境的 JDK 版本换成测试的试试. 还有就是把开发环境和测试环境依赖的第三方服务版本也全部对比一遍,mysql 版本,redis 版本等 能把问题复现在本地环境上就 OK 了.
    peyppicp
        9
    peyppicp  
       2020-05-15 11:21:18 +08:00
    code 有启动参数么,如果有的话,看看这块两边是不是一致
    huntcool001
        10
    huntcool001  
       2020-05-15 11:28:19 +08:00
    才看到你说只是打包的环境不一样. 先把 jdk 换成一样的试试,还不行的话,就很奇怪了,字节码都一样的话不应该啊... 或者是 idea 的 diff 忽略了一些文件没对比? 我可能用笨办法,手动复制一部分开发的文件到测试的 jar 包里替换,看能不能定位到是不是真的字节码不一样
    co2fe
        11
    co2fe  
       2020-05-15 11:35:44 +08:00
    公司项目我也遇到过一次,和你的类似。不过是 spring 循环依赖的问题。我的电脑是 mac,同事的是 windows,两台测试服务器是 linux centos6.8 的。我启动项目,用 idea,war 包放 tomcat,都可以,不循环依赖。同事就报,循环依赖。2 台测试服务器,一个报错,一个不报错。很是迷惑。
    ffLoveJava
        12
    ffLoveJava  
       2020-05-15 11:39:07 +08:00
    是否 bean 是 lazy 加载 ?
    是否存在循环依赖?
    抛去环境不同外,就只能从代码找原因了
    cyd
        13
    cyd  
       2020-05-15 14:13:53 +08:00
    循环依赖要嘛启动成功,要嘛启动报错,我也遇到过。楼主这个症状不像是循环依赖
    然后建议楼主别只光比较代码,对比下两个 jar 包的 md5 或者其它一些指纹,看看是否完全一致。
    hsddszjs
        14
    hsddszjs  
       2020-05-16 01:11:17 +08:00 via iPhone
    说明两个 jar 包的源代码可能并不相同 建议先用 jd-gui 另存为源文件 再用 idea diff 两个源码目录
    UpSally
        15
    UpSally  
    OP
       2020-05-17 00:19:20 +08:00
    @hsddszjs jd-gui 另存对比源文件除了被注释的构建时间记录及构建 jdk 版本不同,其他都一样
    UpSally
        16
    UpSally  
    OP
       2020-05-17 00:20:12 +08:00
    @cyd md5 肯定不同,两个 jar 的构建时间及使用的 jdk 版本不同
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4938 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 611ms · UTC 03:54 · PVG 11:54 · LAX 19:54 · JFK 22:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.