调试至XML验证连接器时触发java.lang.NoClassDefFoundError错误求助
解决java.lang.NoClassDefFoundError: com/google/common/util/concurrent/internal/InternalFutureFailureAccess问题
别担心,这个错误我之前帮好几个开发者排查过,核心原因几乎都是Guava(谷歌核心工具库)的版本不兼容或者依赖缺失导致的。下面给你一步步拆解解决方案:
先搞懂错误根源:
这个
InternalFutureFailureAccess类是Guava 24.0及以上版本才新增的内部类。如果你的项目里引用了低于24.0的Guava版本,或者有其他第三方依赖间接引入了旧版Guava,就会出现这个“找不到类”的报错。解决方案1:统一升级并锁定Guava版本
最直接的办法是在你的项目构建文件里明确指定一个兼容的Guava稳定版本(比如30.1-jre,这个版本兼容性很强),同时排除其他依赖带来的旧版Guava,避免版本冲突:如果用Maven,修改
pom.xml:<!-- 直接引入指定版本的Guava --> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>30.1-jre</version> </dependency> <!-- 举个例子:如果XML验证连接器依赖带了旧Guava,就排除它 --> <dependency> <groupId>[连接器的groupId]</groupId> <artifactId>[连接器的artifactId]</artifactId> <version>[连接器版本]</version> <exclusions> <exclusion> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> </exclusion> </exclusions> </dependency>如果用Gradle,修改
build.gradle:// 引入指定版本的Guava implementation 'com.google.guava:guava:30.1-jre' // 排除连接器依赖中的旧版Guava implementation('xxx:xxx-connector:x.x.x') { exclude group: 'com.google.guava', module: 'guava' }解决方案2:补全缺失的Guava依赖
有些时候,你的项目可能没有直接引入Guava,但XML验证连接器依赖了它。这种情况下,直接把Guava依赖添加到你的构建文件里就行,版本选24.0及以上的稳定版都可以。最后别忘了清理缓存重新构建
本地构建缓存有时候会残留旧版本的依赖,导致配置修改后还是报错。可以执行以下命令清理后重新构建:- Maven:
mvn clean install -U - Gradle:
./gradlew clean build --refresh-dependencies
- Maven:
按照上面的步骤操作后,再重新运行调试器,这个找不到类的错误应该就能解决了。
内容的提问来源于stack exchange,提问作者Sufi




