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

SonarQube分析SpringBoot项目时遇NoClassDefFoundError问题求助

问题描述

执行SonarQube分析SpringBoot项目时触发NoClassDefFoundError,执行的Maven命令:

mvn clean verify sonar:sonar -Dsonar.projectKey=CartoBack -Dsonar.projectName='CartoBack' -Dsonar.host.url=http://localhost:9000 -Dsonar.token=sqp_a58985a52a9cdd7ad2880e719a0b59cf2ece75b7

报错信息:

[INFO] Total time:  36.938 s
[INFO] Finished at: 2024-04-26T09:20:14+01:00
[INFO] ------------------------------------------------------------------------
Exception in thread "Thread-2" java.lang.NoClassDefFoundError: ch/qos/logback/classic/spi/ThrowableProxy
        at ch.qos.logback.classic.spi.LoggingEvent.<init>(LoggingEvent.java:145)
        at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:424)
        at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:386)
        at ch.qos.logback.classic.Logger.error(Logger.java:543)
        at org.eclipse.jgit.internal.util.ShutdownHook.cleanup(ShutdownHook.java:87)
        at java.base/java.lang.Thread.run(Thread.java:842)
Caused by: java.lang.ClassNotFoundException: ch.qos.logback.classic.spi.ThrowableProxy
        at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:445)
        at org.sonarsource.scanner.api.internal.IsolatedClassloader.loadClass(IsolatedClassloader.java:82)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
        ... 6 more

已尝试添加logback-classic依赖,但作用域为test:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.5.6</version>
    <scope>test</scope>
</dependency>
问题原因与解决办法

原因

SonarQube扫描器的隔离类加载器在执行Eclipse JGit触发的清理钩子时,无法找到logback-classic相关类:

  1. 你添加的logback-classic依赖作用域为test,仅在测试阶段生效,而Sonar扫描在verify阶段后执行,无法访问该作用域的依赖;
  2. 若项目依赖spring-boot-starter-logging(默认包含logback-classic),可能存在依赖被排除或版本冲突的情况,导致扫描时logback类不可用。

解决步骤

  1. 调整logback依赖作用域
    要么将已添加的logback-classic依赖的scope改为compile(移除<scope>test</scope>),要么直接移除该依赖,确保spring-boot-starter-logging未被排除:

    <!-- 方式1:调整已有依赖作用域 -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.5.6</version>
    </dependency>
    
    <!-- 方式2:确保Spring Boot日志starter正常生效 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-logging</artifactId>
        <!-- 检查并移除针对logback的exclusions配置 -->
    </dependency>
    
  2. 锁定Sonar Maven插件版本
    确保插件版本与SonarQube服务器版本兼容,在pom.xml中明确指定:

    <build>
        <plugins>
            <plugin>
                <groupId>org.sonarsource.scanner.maven</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
                <version>3.10.0.2594</version> <!-- 替换为与服务器匹配的稳定版本 -->
            </plugin>
        </plugins>
    </build>
    
  3. 清理Maven缓存
    执行命令清理本地仓库缓存,避免依赖冲突:

    mvn clean install -U
    
  4. 检查JGit依赖兼容性
    排查项目中JGit依赖的版本,确保其与Sonar扫描器的依赖版本兼容,避免类加载冲突。

内容的提问来源于stack exchange,提问作者user23984628

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 06:55:04