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

如何用Spring Boot Gradle插件及bootJar任务有条件排除Java文件?

解决Gradle Spring Boot打包时排除指定目录代码的问题

你的问题很典型——虽然sourceSets的exclude逻辑在打印路径时生效了,但bootJar任务并没有同步应用这个排除规则,导致dangerous目录下的文件还是被打包进了Jar。这是因为Spring Boot的bootJar任务(Gradle标准Jar任务的扩展)有时候不会完全继承sourceSets的配置,或者你的exclude逻辑的评估时机和打包任务的执行时机不匹配。

下面给你几个可行的解决方案:

方案一:直接在bootJar任务中配置排除规则

这是最直接有效的方式,因为bootJar是最终负责生成可执行Jar的任务,直接在它里面定义exclude规则能确保打包阶段生效:

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.0.0.RELEASE'
}

// 先判断环境属性是否存在,避免未传-P参数时抛出异常
def isProductionEnv = project.hasProperty('environment') && project.environment == 'prod'

// 配置bootJar的排除规则
bootJar {
    if (isProductionEnv) {
        exclude '**/dangerous/**'
    }
}

// 可选:如果需要让编译阶段也排除这些文件,保留sourceSets的配置
sourceSets {
    main {
        java {
            if (isProductionEnv) {
                exclude '**/dangerous/**'
            }
            // 验证路径的打印逻辑可以保留
            srcDirs.each { dir ->
                fileTree(dir).include('**/*.java').each { file ->
                    println file.absolutePath
                }
            }
        }
    }
}

方案二:确保bootJar任务依赖sourceSets的输出

有时候bootJar可能会直接从源码目录读取文件,而不是使用sourceSets处理后的输出。这种情况下,显式指定bootJar的输入源为sourceSets的output就能解决问题:

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.0.0.RELEASE'
}

def isProductionEnv = project.hasProperty('environment') && project.environment == 'prod'

sourceSets {
    main {
        java {
            if (isProductionEnv) {
                exclude '**/dangerous/**'
            }
            srcDirs.each { dir ->
                fileTree(dir).include('**/*.java').each { file ->
                    println file.absolutePath
                }
            }
        }
    }
}

// 让bootJar使用sourceSets处理后的编译输出
bootJar {
    from sourceSets.main.output
}

验证方式

执行打包命令后,你可以通过以下方式确认排除是否生效:

  • 查看Jar包内容:用解压工具打开生成的Jar,确认dangerous目录不存在
  • 查看打包日志:执行gradlew bootJar --info,搜索exclude相关的日志,确认规则被正确应用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:51:21