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

2020-05-15 10:05:31 +08:00
 UpSally
同样的工程代码,分别在本地环境和测试环境用同样的命令打包,用 idea 的 diff 工具对比两个 jar,反编译内容一样,将两个 jar 在本地用同样的命令运行,测试环境的生成 jar 包运行时实现 ApplicationContextAware 的工具类获取 bean 的时候报空指针,本地生成的 jar 运行不会报异常。将两个 jar 在测试环境运行,测试环境生成的 jar 运行实现。。。的工具类。。会报空指针,本地生成的 jar 运行不报异常。
6062 次点击
所在节点    Java
16 条回复
GM
2020-05-15 10:16:40 +08:00
配置文件也一模一样吗?
GM
2020-05-15 10:17:37 +08:00
java 几的?用到 module 没有,两个 jar 导出的 modules 等等东西也一模一样吗?
C603H6r18Q1mSP9N
2020-05-15 10:34:43 +08:00
类似相同代码链接不同的数据库产生的结果就不一样
是吧,数据库环境系统版本这些都是可能变量,代码不会骗人
huntcool001
2020-05-15 10:38:55 +08:00
JDK 版本,环境变量 ,pom 文件都看看
UpSally
2020-05-15 11:11:08 +08:00
@GM 同样的构建命令,同样的运行命令,配置文件,pom.xml 文件都是一样
UpSally
2020-05-15 11:12:30 +08:00
@huntcool001 测试环境 jdk:1.8.0_211, 本地环境 jdk: 1.8.0_241, pom.xml 文件比对一样
UpSally
2020-05-15 11:15:09 +08:00
@shanghai1998 本地环境和测试环境打的包,都放在测试环境原型,运行命令指定同样的配置文件,使用的是相同的数据库
huntcool001
2020-05-15 11:20:56 +08:00
@UpSally 本地环境的 JDK 版本换成测试的试试. 还有就是把开发环境和测试环境依赖的第三方服务版本也全部对比一遍,mysql 版本,redis 版本等 能把问题复现在本地环境上就 OK 了.
peyppicp
2020-05-15 11:21:18 +08:00
code 有启动参数么,如果有的话,看看这块两边是不是一致
huntcool001
2020-05-15 11:28:19 +08:00
才看到你说只是打包的环境不一样. 先把 jdk 换成一样的试试,还不行的话,就很奇怪了,字节码都一样的话不应该啊... 或者是 idea 的 diff 忽略了一些文件没对比? 我可能用笨办法,手动复制一部分开发的文件到测试的 jar 包里替换,看能不能定位到是不是真的字节码不一样
co2fe
2020-05-15 11:35:44 +08:00
公司项目我也遇到过一次,和你的类似。不过是 spring 循环依赖的问题。我的电脑是 mac,同事的是 windows,两台测试服务器是 linux centos6.8 的。我启动项目,用 idea,war 包放 tomcat,都可以,不循环依赖。同事就报,循环依赖。2 台测试服务器,一个报错,一个不报错。很是迷惑。
ffLoveJava
2020-05-15 11:39:07 +08:00
是否 bean 是 lazy 加载 ?
是否存在循环依赖?
抛去环境不同外,就只能从代码找原因了
cyd
2020-05-15 14:13:53 +08:00
循环依赖要嘛启动成功,要嘛启动报错,我也遇到过。楼主这个症状不像是循环依赖
然后建议楼主别只光比较代码,对比下两个 jar 包的 md5 或者其它一些指纹,看看是否完全一致。
hsddszjs
2020-05-16 01:11:17 +08:00
说明两个 jar 包的源代码可能并不相同 建议先用 jd-gui 另存为源文件 再用 idea diff 两个源码目录
UpSally
2020-05-17 00:19:20 +08:00
@hsddszjs jd-gui 另存对比源文件除了被注释的构建时间记录及构建 jdk 版本不同,其他都一样
UpSally
2020-05-17 00:20:12 +08:00
@cyd md5 肯定不同,两个 jar 的构建时间及使用的 jdk 版本不同

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

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

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

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

© 2021 V2EX