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

如何在Gradle中压缩单个文件?含Copy任务免临时文件实现

在Gradle中直接在Copy/Deb任务内压缩单个文件的方案

针对你构建Deb包时需要压缩manpage文件的场景,完全不用手动创建临时文件,Gradle提供的transform方法可以直接在Copy任务的处理流程中完成二进制压缩,完美适配你的需求。

具体实现代码

来看修改后的任务配置:

import java.util.zip.GZIPOutputStream

task buildDeb(type: Deb, dependsOn: ['jar']) {
    // ... 其他Deb包相关配置
    from (file('packaging/deb-package/manpage')) {
        into '/usr/share/man/man1'
        // 直接重命名为带.gz后缀的目标文件名
        rename(/.*/, deploymentName + '.1.gz')
        filteringCharset = 'UTF-8'
        // 先完成令牌替换的文本过滤
        filter(ReplaceTokens, tokens: [
            'TITLE': appTitle,
            // ... 你的其他令牌配置
        ])
        // 添加GZIP压缩的transformer,直接操作流无需临时文件
        transform { InputStream inputStream, OutputStream outputStream ->
            new GZIPOutputStream(outputStream).withStream { gzos ->
                inputStream.copyTo(gzos)
            }
        }
    }
    // ... 其他Deb包相关配置
}

方案说明

  1. 重命名后缀:直接把目标文件名改成.gz,符合man文件的压缩格式要求
  2. 先过滤后压缩:先通过filter完成文本令牌替换,确保压缩的是已经处理好的最终内容
  3. 流级别的压缩:transform方法直接操作输入输出流——过滤后的文件内容通过输入流传入,我们用GZIPOutputStream包装输出流,直接把压缩后的内容写入目标位置,全程不需要创建任何临时文件

这种方式既避开了Ant文本过滤仅支持Reader接口的限制,又完全满足你“在Copy任务内完成压缩”的需求,是最简洁高效的实现方式。

内容的提问来源于stack exchange,提问作者Dávid Horváth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:50:34