使用Eclipse JasperSoft插件打开jrxml时遇Logback类转换异常求助
我之前也碰到过一模一样的这个问题!这种java.lang.ClassCastException: ch.qos.logback.classic.util.LogbackMDCAdapter cannot be cast to ch.qos.logback.classic.util.LogbackMDCAdapter异常看起来特别诡异——明明是同一个类却转不了,本质原因是类加载器冲突:同一个Logback类被两个不同的类加载器(比如JasperSoft插件的类加载器和你项目的类加载器)加载了,在JVM眼里它们是完全不同的类型,自然就会抛出转换异常。
针对你在Eclipse中使用JasperSoft插件编辑jrxml的场景,我整理了几个靠谱的解决步骤:
统一Logback版本,消除版本差异
先检查插件和项目的Logback版本是否一致:- 打开Eclipse的
Window > Preferences > Jaspersoft Studio > Classpath,查看插件自带的logback-classic和logback-core版本; - 再对比你项目依赖管理文件(比如Maven的
pom.xml或Gradle的build.gradle)里的Logback版本; - 把项目依赖的版本调整成和插件一致的版本,避免版本不兼容导致的类定义差异。
- 打开Eclipse的
清理项目中的重复Logback依赖
很多时候项目会通过第三方依赖间接引入Logback,导致重复加载。如果用Maven,执行以下命令找出重复依赖:mvn dependency:tree找到间接引入Logback的依赖后,用
<exclusions>标签排除多余的依赖,比如:<dependency> <groupId>com.some.dependency</groupId> <artifactId>some-artifact</artifactId> <version>1.0.0</version> <exclusions> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </exclusion> <exclusion> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> </exclusion> </exclusions> </dependency>重置Eclipse和插件状态,清理缓存
有时候Eclipse的缓存或插件状态损坏也会导致这类问题:- 关闭Eclipse,删除工作区目录下的
.metadata文件夹(记得备份你的工作区配置); - 重新启动Eclipse,导入项目,执行
Project > Clean清理并重新构建; - 如果问题依旧,可以尝试卸载并重新安装JasperSoft插件,确保插件文件没有损坏。
- 关闭Eclipse,删除工作区目录下的
调整类加载顺序(最后尝试)
如果前面的方法都无效,可以强制让项目的Logback优先加载:
右键项目 →Properties > Java Build Path > Order and Export,把项目依赖的Logback jar包移到列表最上方,让JVM优先加载项目中的版本,而非插件自带的版本。
内容的提问来源于stack exchange,提问作者Francesco Politano

