wam_3000 2024-06-16 17:09 采纳率: 6.7%
浏览 24

openjdk17.0.7整合findbugs

目前我想在springboot项目里整合findbugs,做静态代码检查,我用的openjdk17.0.7,这个jdk版本不能变更,

img

我的pom.xml 的配置文件如下:

<dependency>
    <groupId>com.google.code.findbugs</groupId>
    <artifactId>jsr305</artifactId>
    <version>3.0.2</version>
</dependency>
<dependency>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <version>3.0.5</version>
</dependency>
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>findbugs-maven-plugin</artifactId>
    <version>3.0.5</version>
    <configuration>
        <excludeFilterFile>findbugs-exclude.xml</excludeFilterFile>
        <!--<threshold>High</threshold>-->
        <!--<threshold>Low</threshold>-->
        <effort>Default</effort>
        <findbugsXmlOutput>true</findbugsXmlOutput>
        <xmlOutput>true</xmlOutput>
        <findbugsXmlOutputDirectory>target/site</findbugsXmlOutputDirectory>
        <sourceEncoding>UTF-8</sourceEncoding>
    </configuration>
</plugin>
<reporting>
    <plugins>
        <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
            <version>3.0.5</version>
            <configuration>
                <xmlOutput>true</xmlOutput>
                <!-- Optional directoryto put findbugs xdoc xml report -->
                <!--<xmlOutputDirectory>target/site</xmlOutputDirectory>-->
                <findbugsXmlOutput>true</findbugsXmlOutput>
            </configuration>
        </plugin>
    </plugins>
</reporting>

我在控制台执行命令:mvn findbugs:findbugs 时报错

img

img

img

但我在JDK21上执行 mvn findbugs:findbugs 命令就不会报错,目前findbugs-maven-plugin 的最新版本就是3.0.5,我试着改成3.0.1或者更低的版本也会报错

img

难道openjdk17不支持findbugs吗?尝试了很多findbugs的版本都报错,请问到底是什么原因?

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-16 17:09
    关注

    引自免费微信小程序:皆我百晓生

    从你提供的信息来看,问题可能出在FindBugs与OpenJDK 17的兼容性上。错误信息显示java.lang.IllegalArgumentExceptionorg.objectweb.asm.ClassReader的构造函数中抛出,这通常意味着ASM(用于读取类字节码的库)与你正在使用的JDK版本不兼容。

    FindBugs依赖于ASM库来解析Java字节码。不同的JDK版本可能会生成不同格式的字节码,而ASM库可能没有更新到足以处理所有JDK版本生成的字节码格式。

    为了解决这个问题,你可以尝试以下步骤:

    1. 升级FindBugs的ASM依赖: 确保FindBugs插件使用的是与OpenJDK 17兼容的ASM版本。你可以在FindBugs插件的Maven仓库页面查看它所依赖的ASM版本,然后检查该版本是否声明了对OpenJDK 17的支持。

    2. 手动指定ASM版本: 在你的pom.xml中,可以尝试显式添加ASM的依赖,并确保其版本号是与OpenJDK 17兼容的。

      <dependency>
          <groupId>org.ow2.asm</groupId>
          <artifactId>asm</artifactId>
          <version>9.4</version> <!-- 确保此版本与你的JDK版本兼容 -->
      </dependency>
      
    3. 更新FindBugs插件: 尽管你说FindBugs的最新版本是3.0.5,但是仍然值得检查是否有更新的版本发布。有时候,插件作者会在新版本中修复与特定JDK版本的兼容性问题。

    4. 调整FindBugs配置: 尝试在findbugs-maven-plugin的配置中加入ignoreFailures参数,设置为true,这样即使有错误,构建也不会失败。

      <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>findbugs-maven-plugin</artifactId>
          <version>3.0.5</version>
          <configuration>
              ...
              <ignoreFailures>true</ignoreFailures>
          </configuration>
      </plugin>
      

      这不是解决根本问题的方法,但可以帮助你暂时绕过错误进行构建。

    5. 使用FindBugs的替代工具: 如果上述方法都无法解决问题,考虑使用其他的静态代码分析工具,比如SonarQube、PMD、Checkstyle等,它们可能对OpenJDK 17有更好的支持。

    请逐一尝试这些步骤,直到找到适合你项目的解决方案。如果问题仍然存在,可能需要深入研究FindBugs源代码或联系FindBugs社区获取更具体的帮助。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月16日