Java17 Maven项目集成Checker Framework编译错误求助
Spring Boot(Java 17)集成Checker Framework编译错误排查与解决
问题概述
- 环境:Java 17 + Spring Boot + Maven项目
- 操作:按照Checker Framework官方Maven集成文档配置
- 异常:构建时抛出
java.lang.NoSuchMethodError: 'int org.checkerframework.org.plumelib.util.CollectionsPlume.mapCapacity(int)'
错误详情示例
完整错误栈:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.11.0:compile (default-compile) on project demo: Fatal error compiling: java.lang.NoSuchMethodError: 'int org.checkerframework.org.plumelib.util.CollectionsPlume.mapCapacity(int)' at org.checkerframework.framework.util.AnnotatedTypeFormatter.createAnnotationBuilder(AnnotatedTypeFormatter.java:123) ...(省略后续栈信息)
典型pom配置片段
项目中Checker Framework相关配置:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.11.0</version> <configuration> <annotationProcessorPaths> <path> <groupId>org.checkerframework</groupId> <artifactId>checker-qual</artifactId> <version>3.37.0</version> </path> <path> <groupId>org.checkerframework</groupId> <artifactId>checker</artifactId> <version>3.37.0</version> </path> </annotationProcessorPaths> <compilerArgs> <arg>-processor</arg> <arg>org.checkerframework.checker.nullness.NullnessChecker</arg> </compilerArgs> </configuration> </plugin> </plugins> </build>
排查方向
这个错误本质是依赖版本不兼容:Plumelib是Checker Framework的核心依赖库,mapCapacity方法仅存在于较新版本的Plumelib中,但项目中可能引入了旧版本的Plumelib,或者Checker Framework版本与Spring Boot依赖的Plumelib版本冲突。
解决方案
统一Checker Framework与Plumelib版本
显式指定Plumelib版本,确保与Checker Framework版本完全匹配:<dependencies> <dependency> <groupId>org.checkerframework</groupId> <artifactId>plumelib</artifactId> <version>3.37.0</version> <!-- 版本号与Checker Framework保持一致 --> <scope>provided</scope> </dependency> </dependencies>排查并排除依赖冲突
- 执行Maven命令查看依赖树,定位冲突的Plumelib版本:
mvn dependency:tree | grep plumelib - 找到引入旧版本Plumelib的依赖,添加排除规则:
<dependency> <groupId>xxx</groupId> <!-- 冲突依赖的groupId --> <artifactId>yyy</artifactId> <!-- 冲突依赖的artifactId --> <exclusions> <exclusion> <groupId>org.checkerframework</groupId> <artifactId>plumelib</artifactId> </exclusion> </exclusions> </dependency>
- 执行Maven命令查看依赖树,定位冲突的Plumelib版本:
升级Checker Framework到Java 17兼容版本
确保使用的Checker Framework版本完全支持Java 17,建议切换到最新稳定版(如3.42.0及以上),避免版本适配问题。调整Maven Compiler Plugin配置
确保编译插件版本与Java 17兼容,同时指定编译版本:<configuration> <source>17</source> <target>17</target> <release>17</release> <!-- 其他原有配置 --> </configuration>
内容的提问来源于stack exchange,提问作者Kalhara
相关产品推荐
相关产品推荐

