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

如何通过CLI获取Gradle多项目构建生成的所有二进制文件/包?

无需修改项目的Gradle制品收集方案

针对你的大规模多版本Gradle项目场景,这里提供几种无需修改项目代码的方法,让Gradle直接报告需发布的二进制文件及存储位置:

方法1:提取项目发布核心属性

利用Gradle内置的properties命令,跳过构建直接读取项目配置,快速获取制品的基础信息和输出目录:

gradle properties --no-build -q | grep -E "(archivesBaseName|version|group|libsDirectory|distributionsDirectory)"
  • --no-build:避免执行构建流程,节省大量时间
  • -q:仅输出关键属性,过滤冗余日志
  • 关键属性说明:
    • archivesBaseName/version/group:组成制品的标准命名
    • libsDirectory:Jar/War等库文件的默认输出目录
    • distributionsDirectory:Zip/Tar等分发包的输出目录

方法2:通过任务模拟执行获取输出信息

针对发布类任务(如uploadArchives、publish),用模拟执行模式获取其关联的输出文件路径:

# 查看所有子项目的发布任务输出
gradle publish -m -q | grep "Output files"

# 指定单个子项目
gradle :sub-project:publish -m -q | grep "Output files"
  • -m:仅模拟任务执行,不实际发布,仅输出任务的输入输出元数据

方法3:用初始化脚本生成统一制品报告

编写轻量初始化脚本,遍历所有子项目收集制品信息,无需修改项目的build.gradle:
创建临时脚本artifact-report.gradle:

allprojects {
    afterEvaluate { proj ->
        def artifacts = []
        // 收集Jar/War类制品
        proj.tasks.withType(Jar).each { task ->
            artifacts.add([
                projectPath: proj.path,
                artifactType: task.name,
                absolutePath: task.outputs.files.singleFile.absolutePath,
                fileName: task.outputs.files.singleFile.name
            ])
        }
        // 收集分发包制品
        proj.tasks.withType(Distribution).each { task ->
            task.outputs.files.each { file ->
                artifacts.add([
                    projectPath: proj.path,
                    artifactType: task.name,
                    absolutePath: file.absolutePath,
                    fileName: file.name
                ])
            }
        }
        // 输出JSON格式结果,方便Jenkins解析
        if (!artifacts.isEmpty()) {
            println new groovy.json.JsonBuilder(artifacts).toPrettyString()
        }
    }
}

在Jenkins中执行:

gradle --init-script artifact-report.gradle tasks --no-build -q
  • --init-script:在项目脚本前执行,完全不侵入现有项目代码

方法4:老版本Gradle兼容方案

针对Gradle 4.x及更早版本,结合依赖命令和文件扫描补充:

# 获取归档配置中的制品名称
gradle dependencies --configuration archives -q | grep -E ".*:.jar" | awk '{print $1}'

# 扫描构建目录下的所有可发布制品
find $(gradle properties -q | grep buildDir | awk -F= '{print $2}') -name "*.jar" -o -name "*.zip" -o -name "*.war"

核心优势

  • 完全无需修改项目代码,适配所有Gradle版本和多项目架构
  • 命令行/脚本化方式可直接集成到现有Jenkins流水线
  • 支持批量处理5000+仓库,通过Jenkins批量执行并解析输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 17:05:01