我遇到了一个ClassCastException
Cannot cast my.package.classA to my.package.classA.
注意,(规范)类(名称)是相同的。
我理解这应该与不同的类加载器和/或从不同的jars加载类有关。该项目是使用Maven构建的。我能否以某种方式调试在每种情况下使用了哪个类加载器,以及从哪个jar加载了类?
发布于 2020-09-30 09:34:25
为ClassCastException添加一个断点。对于IntelliJ,如下所示:

一旦捕获异常,在调试器调用层次结构中导航,直到找到应该发生强制转换的行,并且对这两个类都有一个引用。
例如:

现在,您可以检查这两个类(在我的例子中是typeClass和instanceClass)。该类保存对其类加载器的引用。
在我的例子中,是ModuleClassLoader for Module "my.ear" from Service Module Loader和ModuleClassLoader for Module "my-web-app.war" from Service Module Loader

正如你所看到的,一个阶级来自耳朵,另一个来自战争。
在应该解决问题的web应用程序provided pom.xml**,中,将依赖项更改为。
请注意,war文件将不再在ear之外运行,如果需要这两种方案,请使用Maven profile。
https://stackoverflow.com/questions/64133826
复制相似问题