仅在 QA 环境中而不是在本地获取“java.lang.NoClassDefFoundError:无法初始化类”?

Posted

技术标签:

【中文标题】仅在 QA 环境中而不是在本地获取“java.lang.NoClassDefFoundError:无法初始化类”?【英文标题】:Getting "java.lang.NoClassDefFoundError: Could not initialize class" only in QA environment, not locally? 【发布时间】:2021-09-11 01:16:28 【问题描述】:

我看过这个: java.lang.NoClassDefFoundError: Could not initialize class XXX

还有这个:Different methodologies for solving bugs that only occur in production

但我的问题是,鉴于第一个答案对这个问题的描述,我怎么可能只在两个地方之一上得到这个错误?这不是一个非常严重的错误,应该会阻止程序在任何位置编译吗? (我在文件中正确导入了这个错误发生的类。)

我应该寻找两种环境之间的哪些差异?

关于我在 QA 中遇到的错误的其他问题表明它可能是类本身的一些嵌套问题,但就像我说的那样,如果是这种情况,为什么它只会在 QA 环境中发生?我可以整天在本地对我的程序运行 jmeter 负载/耐久性测试,而不会看到此错误。

请注意,我不负责 QA 的部署,但有什么我应该问负责的人吗?运行配置差异会是潜在原因吗?

splunk 中的日志不是很有帮助,这里是一个错误实例的异常的一部分:

[https-jsse-nio-11402-exec-9] 28 Jun 2021 13:29:45,415+0000 ERROR GenericThrowableMapper [applicationSystemCode=[removed]-app, clientIP=[removed], clusterId=[removed], containerId=[removed], correlationId=[removed], domainName=[removed], hostName=[removed], messageId=[removed], userId=[removed], webAnalyticsCorrelationId=|]: java.lang.NoClassDefFoundError: Could not initialize class [removed].CDDConfig
    at [removed].execute([removed]AggregationResource.java:77)
    at [removed]AggregationResource$$FastClassBySpringCGLIB$$7a8c5a8e.invoke(<generated>)

然后它继续进入包类和所有这些的一堆行。我添加这个是为了问 - 也许我应该尝试记录其他内容?

【问题讨论】:

【参考方案1】:

这不过是一个自发的猜测,但从经验来看,我怀疑是 JDK/JRE 版本错误。

我见证的经典案例:您在开发机器上使用 OpenJDK 版本 8.x.x 编译某些东西。您提交/推送,Jenkins CICD 管道开始运行,但有人将其 JAVA_HOME 配置为某个 11.x 版本的 JDK。 -> ClassNotFoundError、NoClassDef 等

如果你自己不部署到QA,你能检查一下代码是用什么JDK编译的吗?或者向做这件事的人询问这些信息。

【讨论】:

谢谢,我会问他什么JDK版本之类的!

以上是关于仅在 QA 环境中而不是在本地获取“java.lang.NoClassDefFoundError:无法初始化类”?的主要内容,如果未能解决你的问题,请参考以下文章

查询在一个环境中而不是在其他环境中并行运行

在模拟器中而不是在设备中更新位置

C++ 应用程序仅在使用本地 Windows 调试器时运行,而不是在哪个 exe 文件中运行

使用 jQuery 在变量中而不是在当前 DOM 中选择内容?

如何在片段中而不是在活动中使用 NavController(在片段中带有 NavHost)?

RESTful API:在请求正文中而不是在 URI 中传递父资源定位器是不是更实用?