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

Gradle 8.5+Java21环境下执行spotbugsMain任务显示NO-SOURCE未执行

Gradle SpotBugs任务显示NO-SOURCE问题解决

问题场景

使用Gradle 8.5、Java 21,通过Kotlin DSL编写构建脚本,配置SpotBugs插件后执行gradle spotbugsMain命令,控制台输出NO-SOURCE,任务未实际执行。

当前配置文件如下:

gradle.kts 原配置

import com.github.spotbugs.snom.SpotBugsTask

plugins {
    id("com.github.spotbugs")
}

spotbugs {
    group = "Verification"
    description = "Run Spotbugs on this project."
    ignoreFailures = false
    showStackTraces = true
    showProgress = true
    maxHeapSize = "1g"

}
tasks.withType<SpotBugsTask>().configureEach {
    dependsOn("assemble")
    classDirs = files("${project.layout.buildDirectory}.absolutePath/build/classes/java/main")
    sourceDirs = files("${project.layout.buildDirectory}.absolutePath/src/main/java")
}

libs.versions.toml 原配置

[versions]
spotbugs = "6.0.6"

[libraries]
spotbugs-gradle = { module = "com.github.spotbugs.snom:spotbugs-gradle-plugin", version.ref = "spotbugs" }

错误原因

  1. 插件引入方式不匹配:libs.versions.toml中定义了SpotBugs插件版本,但gradle.kts的plugins块未正确关联该配置,可能导致插件加载异常或版本不一致。
  2. 路径配置错误:硬编码路径时错误拼接project.layout.buildDirectory的absolutePath属性,生成的路径格式无效(例如会变成/xxx/build.absolutePath/build/classes/java/main),导致SpotBugs无法找到目标类文件和源码,触发NO-SOURCE提示。

修复方案

1. 统一插件版本管理

在libs.versions.toml中添加plugins节点管理插件版本,再通过别名引入插件:

修改后的 libs.versions.toml

[versions]
spotbugs = "6.0.6"

[libraries]
spotbugs-gradle = { module = "com.github.spotbugs.snom:spotbugs-gradle-plugin", version.ref = "spotbugs" }

[plugins]
spotbugs = { id = "com.github.spotbugs", version.ref = "spotbugs" }

修改后的 gradle.kts 插件引入部分

plugins {
    alias(libs.plugins.spotbugs)
    // 必须添加Java插件,否则无法获取sourceSets相关配置
    java
}

2. 修正路径配置

使用Gradle内置的sourceSets属性获取标准路径,避免硬编码:

修改后的 gradle.kts SpotBugs任务配置部分

tasks.withType<SpotBugsTask>().configureEach {
    dependsOn("assemble")
    // 从sourceSets获取正确的类文件目录和源码目录
    classDirs = sourceSets.main.get().output.classesDirs
    sourceDirs = sourceSets.main.get().java.srcDirs
}

完整修正后的 gradle.kts

import com.github.spotbugs.snom.SpotBugsTask

plugins {
    alias(libs.plugins.spotbugs)
    java
}

spotbugs {
    group = "Verification"
    description = "Run Spotbugs on this project."
    ignoreFailures = false
    showStackTraces = true
    showProgress = true
    maxHeapSize = "1g"
}

tasks.withType<SpotBugsTask>().configureEach {
    dependsOn("assemble")
    classDirs = sourceSets.main.get().output.classesDirs
    sourceDirs = sourceSets.main.get().java.srcDirs
}

验证执行

执行gradle spotbugsMain命令,SpotBugs会正确识别类文件和源码文件,启动代码扫描任务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:57:29