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

Gradle Zip任务打包Java文件时如何保留指定目录结构?

解决Gradle Zip任务保留目录结构的问题

我来帮你搞定这个Zip打包目录结构的问题!你当前的任务之所以会把所有Java文件都放到zip根目录,是因为你使用fileTree时,默认会把指定的路径(比如core-module/src/mypackage/)作为文件的相对路径起点,所以里面的子目录和文件都会直接平铺到zip根目录。下面给你两种可行的解决方案:

方法一:从项目根目录开始匹配文件(推荐)

直接以项目根目录作为from的起点,通过include精确指定需要打包的文件路径,这样Gradle会自动保留完整的目录结构:

task apiJavaDocSources(type: Zip) {
    // 打包core-module下指定的Java文件,保留core-module/src/mypackage/...结构
    from(project.rootDir) {
        include 'core-module/src/mypackage/subpackage/*Exception.java'
        include 'core-module/src/mypackage/subpackage/package-info.java'
        include 'core-module/src/mypackage/anotherpackage/*.java'
    }
    // 打包lib-module下指定的Java文件,保留lib-module/src/mypackage/...结构
    from(project.rootDir) {
        include 'lib-module/src/mypackage/bundleinfo/*Dummy.java'
        include 'lib-module/src/mypackage/bundleinfo/Random.java'
    }
    archiveName 'api-javadoc-sources.zip'
    destinationDir(file('image'))
}

这种方法的好处是配置简洁,直接通过完整路径匹配文件,不需要额外处理目录映射,打包后的结构完全和你本地项目的对应路径一致。

方法二:用into指定目标目录

如果你不想从项目根目录开始from,可以给每个from块添加into配置,明确指定这些文件在zip中的目标目录:

task apiJavaDocSources(type: Zip) {
    // 处理core-module的文件,将它们放到zip内的core-module/src/mypackage/目录下
    from(fileTree('core-module/src/mypackage/').matching {
        include 'subpackage/*Exception.java'
        include 'subpackage/package-info.java'
        include 'anotherpackage/*.java'
    }) {
        into 'core-module/src/mypackage/'
    }
    // 处理lib-module的文件,将它们放到zip内的lib-module/src/mypackage/目录下
    from(fileTree('lib-module/src/mypackage/').matching {
        include 'bundleinfo/*Dummy.java'
        include 'bundleinfo/Random.java'
    }) {
        into 'lib-module/src/mypackage/'
    }
    archiveName 'api-javadoc-sources.zip'
    destinationDir(file('image'))
}

这里的into相当于给当前from块里的所有文件指定了一个"父目录",原来fileTree里的子目录(比如subpackage)就会嵌套到这个父目录下,从而实现你想要的结构。

两种方法都能达到你的需求,你可以根据自己的习惯选择。运行./gradlew apiJavaDocSources之后,生成的zip文件就会保留core-module和lib-module开头的完整目录结构了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:37:37