You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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>
    
  • 排查并排除依赖冲突

    1. 执行Maven命令查看依赖树,定位冲突的Plumelib版本:
      mvn dependency:tree | grep plumelib
      
    2. 找到引入旧版本Plumelib的依赖,添加排除规则:
      <dependency>
        <groupId>xxx</groupId> <!-- 冲突依赖的groupId -->
        <artifactId>yyy</artifactId> <!-- 冲突依赖的artifactId -->
        <exclusions>
          <exclusion>
            <groupId>org.checkerframework</groupId>
            <artifactId>plumelib</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      
  • 升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:15:14