分发插件有助于构建作为项目分发包的归档文件。分发包归档文件通常包含可执行应用程序和其他支持文件,例如文档。
基础插件
分发插件分为 distribution
和 distribution-base
插件。
distribution-base
插件向项目添加一个名为 distributions
的扩展,类型为 DistributionContainer。
distribution
插件应用 distribution-base
插件,并在名为 main
的 distributions 容器扩展中创建一个单一分发包。
如果你的构建只生成一个分发包,你只需要配置该分发包或依赖于默认设置。
用法
要使用分发插件,请在你的构建脚本中包含以下内容
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。以下示例演示如何将主分发包的 ZIP 归档文件和自定义分发包的 TAR 归档文件添加到 myDistribution
发布
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
}
}
}