分发插件有助于构建作为项目分发的归档文件。分发归档文件通常包含可执行应用程序和其他支持文件,例如文档。
基础插件
分发插件分为 distribution
和 distribution-base
插件。
distribution-base
插件向项目添加一个类型为 DistributionContainer 的名为 distributions
的扩展。
distribution
插件应用 distribution-base
插件并在名为 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 Publish Plugin 或 Maven Publish Plugin 发布。
使用 Ivy/Maven 发布插件
要使用 Ivy Publish Plugin 将分发发布到 Ivy 仓库,请将其一个或两个归档任务添加到 IvyPublication。以下示例演示了如何将 main
分发的 ZIP 归档和 custom
分发的 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 Publish Plugin 将分发发布到 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
}
}
}