Appearance
归档操作(ZIP/TAR)
Gradle 提供 Zip、Tar 任务用于创建归档文件,以及 zipTree()/tarTree() 用于解压。
创建 ZIP
kotlin
tasks.register<Zip>("packageDist") {
archiveFileName.set("my-app-${project.version}.zip")
destinationDirectory.set(layout.buildDirectory.dir("dist"))
// 添加文件
from(tasks.named<Jar>("jar"))
from("src/main/resources/config") { into("config") }
from("scripts") {
into("bin")
include("*.sh")
fileMode = "755".toInt(8)
}
// 排除
exclude("**/*.DS_Store")
}创建 TAR
kotlin
tasks.register<Tar>("packageTar") {
archiveFileName.set("my-app-${project.version}.tar.gz")
destinationDirectory.set(layout.buildDirectory.dir("dist"))
compression = Compression.GZIP // 支持 NONE/GZIP/BZIP2/XZ
from(tasks.named<Jar>("jar"))
from("scripts") { into("bin") }
}归档文件命名规则
kotlin
tasks.named<Jar>("jar") {
// archiveFileName = "${archiveBaseName}-${archiveVersion}-${archiveClassifier}.${archiveExtension}"
archiveBaseName.set("my-app")
archiveVersion.set(project.version.toString())
archiveClassifier.set("all") // 如:my-app-1.0-all.jar
// archiveExtension 默认根据任务类型设置
}解压 ZIP
kotlin
tasks.register<Copy>("extractZip") {
from(zipTree("libs/external.zip")) {
include("**/*.jar")
}
into("$buildDir/extracted")
}
// 在依赖中使用 zipTree
tasks.register<Jar>("fatJar") {
configurations.runtimeClasspath.get().forEach { file ->
from(zipTree(file))
}
with(tasks.named<Jar>("jar").get())
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}解压 TAR
kotlin
tasks.register<Copy>("extractTar") {
from(tarTree("archive.tar.gz"))
into("$buildDir/unpacked")
}处理重复文件
kotlin
tasks.named<Jar>("jar") {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE // 保留第一个
// DuplicatesStrategy.INCLUDE // 保留所有(默认,会警告)
// DuplicatesStrategy.FAIL // 失败
// DuplicatesStrategy.WARN // 警告并保留
}