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

build.gradle中哪个表达式可获取Gradle默认jar任务打包的文件列表?

获取Jar归档打包文件列表的核心方法

在不修改任何Jar任务默认配置的场景下,build.gradle中可通过以下表达式直接获取实际会被打包进归档的文件集合:

  • Groovy DSL:jar.source
  • Kotlin DSL:tasks.jar.get().source

该表达式返回的是Jar任务当前配置的全部源文件树,和最终生成的Jar包内的文件列表完全一一对应,不存在配置和实际归档内容不一致的情况。

源码定位误区说明

在两个Jar类源码中找不到对应文件绑定逻辑的原因是:源文件的默认关联配置逻辑并不在Jar任务类本身的实现中。org.gradle.api.tasks.bundling.Jar和后续版本的org.gradle.jvm.tasks.Jar只负责实现文件打包归档的通用能力,不会硬编码指定需要打包的文件路径。

实际的默认绑定逻辑位于Gradle Java插件的初始化流程中:Java插件应用时,会自动将主sourceSet(sourceSets.main)的输出目录绑定到默认jar任务的source属性上,这部分逻辑写在Java插件的任务装配代码里,而非Jar任务类的源码中。

自定义sourceSet未进入默认Jar的根因

由于Java插件的默认装配逻辑只关联了sourceSets.main.output,自定义创建的sourceSet不会被自动纳入jar任务的源文件范围,因此其包含的源码编译结果、资源文件都不会出现在默认生成的Jar归档中。如果需要纳入自定义sourceSet的内容,仅需在build.gradle中执行一次手动绑定即可,例如:

// 将自定义sourceSet的输出加入默认Jar的打包源
jar.from sourceSets.myCustomSource.output

验证用辅助任务示例

可在build.gradle中添加如下打印任务,直接输出Jar任务将打包的全部文件路径:

tasks.register("showJarContents") {
    doLast {
        println "Jar归档打包文件明细:"
        jar.source.visit { detail ->
            // 过滤掉目录条目,只打印实际文件
            if (!detail.isDirectory) {
                println "  * ${detail.relativePath}"
            }
        }
    }
}

执行gradle showJarContents即可看到完整的文件列表,结果和打开最终Jar包看到的文件内容完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 11:24:10