Gradle技术问询:如何修改插件提供的Task属性
关于Gradle Application插件的taskZip/taskTar任务说明与实用配置
嘿,我太懂这种找不到资料的憋屈感了——Gradle 4.x的旧版本文档确实有些零散,结合你提到的Gradle 4.4.1、Java 8环境,我来给你捋清楚这两个任务的来龙去脉:
首先,你说的taskZip和taskTar是Application插件自动生成的应用分发压缩任务:
taskZip本质就是Gradle内置的Zip类型任务,负责打包完整的应用分发包(包含编译后的class文件、依赖库、启动脚本等)taskTar是对应的Tar包任务,逻辑和Zip完全一致,只是输出格式不同
常见自定义需求示例
既然你已经查阅过Zip子类文档,那直接给你几个实用的配置场景,照着改就行:
- 修改压缩包的名称与输出目录
默认压缩包会以[项目名]-[版本号]命名,输出在build/distributions下,你可以自定义:
taskZip { archiveName = "my-custom-app.zip" // 自定义压缩包名称 destinationDir = file("$buildDir/my-zips") // 指定输出到自定义目录 }
- 调整压缩包内的目录结构
默认解压后根目录是[项目名]-[版本号],你可以改成自定义名称:
taskZip { into("my-app-root") { // 压缩包内的根目录改为my-app-root from(installDist.outputs) } }
- 添加额外文件到压缩包
比如把项目里的配置文件或文档打包进去:
taskZip { from("src/main/config") { // 将src下的配置文件放到压缩包的config目录 into("config") } from("README.md") // 直接把根目录的README放到压缩包根目录 }
- 移除不需要的文件
如果分发包里有多余的依赖或日志文件,可以排除:
taskZip { exclude("**/*.log") exclude("lib/unneeded-dependency-*.jar") }
额外小技巧
Application插件的build任务默认依赖这两个压缩任务,所以执行./gradlew build时会自动生成Zip和Tar包。如果不想让build任务触发它们,可以取消依赖:
build.dependsOn.remove(taskZip) build.dependsOn.remove(taskTar)
因为taskZip完全继承了Zip类型的所有属性和方法,你查文档看到的from、into、exclude等API,直接套用到taskZip上就能生效~
内容的提问来源于stack exchange,提问作者mike rodent
相关产品推荐
相关产品推荐

