分发插件有助于构建用于项目分发的归档文件。分发归档文件通常包含可执行应用程序和其它支持文件,例如文档。
Base 插件
分发插件被拆分为 distribution
插件和 distribution-base
插件。
distribution-base
插件为项目添加一个名为 distributions
的扩展,其类型为 DistributionContainer。
distribution
插件应用 distribution-base
插件,并在 distributions 容器扩展中创建一个名为 main
的单分发。
如果你的构建只产生一个分发,你只需要配置该分发或依赖于默认配置即可。
用法
要使用分发插件,请在你的构建脚本中包含以下内容
plugins {
distribution
}
plugins {
id 'distribution'
}
你可以运行 gradle distZip
将主分发打包为 ZIP 文件,或运行 gradle distTar
创建 TAR 文件。要构建这两种类型的归档文件,只需运行 gradle assembleDist
。文件将创建在 layout.buildDirectory.dir("distributions/${project.name}-${project.version}.«ext»")
。
你可以运行 gradle installDist
将未压缩的分发组装到 layout.buildDirectory.dir("install/${project.name}")
。
任务
分发插件会为你的项目添加一些任务,如下所示。
对于你添加到项目的每个额外分发,分发插件会添加以下任务,其中 distributionName 来自 Distribution.getName()
以下示例创建一个 custom
分发,它将导致向项目添加四个额外的任务:customDistZip
、customDistTar
、assembleCustomDist
和 installCustomDist
distributions {
create("custom") {
// configure custom distribution
}
}
distributions {
custom {
// configure custom distribution
}
}
假设项目名称是 myproject
,版本是 1.2
,运行 gradle customDistZip
将生成一个名为 myproject-custom-1.2.zip
的 ZIP 文件。
运行 gradle installCustomDist
会将分发内容安装到 layout.buildDirectory.dir("install/custom")
。
分发内容
src/$distribution.name/dist
目录中的所有文件将自动包含在分发中。你可以通过配置作为容器一部分的 Distribution 对象来添加额外文件。
distributions {
main {
distributionBaseName = "someName"
distributionClassifier = "classifier"
contents {
from("src/readme")
}
}
}
distributions {
main {
distributionBaseName = 'someName'
distributionClassifier = 'classifier'
contents {
from 'src/readme'
}
}
}
在上面的示例中,src/readme
目录的内容将包含在分发中(以及默认添加的 src/main/dist
目录中的文件)。
distributionBaseName
和 distributionClassifier
属性也已被修改。这将导致创建的分发归档文件具有不同的名称。
distributions {
main {
distributionBaseName = "someName"
contents {
into("bin/config") {
from("config")
}
into("lib/samples") {
from("samples")
}
}
}
}
distributions {
main {
distributionBaseName = 'someName'
contents {
into('bin/config') {
from 'config'
}
into('lib/samples') {
from 'samples'
}
}
}
}
在上面的示例中,CopySpec 定义了内容,确保如果 bin/config
目录不存在则自动创建,并将 config
目录的内容复制到其中。同样的过程也适用于 lib/samples
目录。
Gradle 提供了一套强大的 API 来简化文件处理、管理文件依赖、生成报告等。CopySpec 只是其中一个例子。
文件操作在 处理文件 中有所涵盖。
发布
可以使用 Ivy 发布插件 或 Maven 发布插件 来发布分发。
使用 Ivy/Maven 发布插件
要使用 Ivy 发布插件 将分发发布到 Ivy 仓库,请将其一个或两个归档任务添加到 IvyPublication 中。以下示例演示了如何将 main
分发的 ZIP 归档文件和 custom
分发的 TAR 归档文件添加到 myDistribution
publication 中。
plugins {
`ivy-publish`
}
publishing {
publications {
create<IvyPublication>("myDistribution") {
artifact(tasks.distZip.get())
artifact(tasks["customDistTar"])
}
}
}
plugins {
id 'ivy-publish'
}
publishing {
publications {
myDistribution(IvyPublication) {
artifact distZip
artifact customDistTar
}
}
}
类似地,要使用 Maven 发布插件 将分发发布到 Maven 仓库,请将其一个或两个归档任务按如下方式添加到 MavenPublication 中。
plugins {
`maven-publish`
}
publishing {
publications {
create<MavenPublication>("myDistribution") {
artifact(tasks.distZip)
artifact(tasks["customDistTar"])
}
}
}
plugins {
id 'maven-publish'
}
publishing {
publications {
myDistribution(MavenPublication) {
artifact distZip
artifact customDistTar
}
}
}