發佈外掛有助於建置作為專案發佈版本的封存檔。發佈封存檔通常包含可執行應用程式和其他支援檔案,例如文件。

基礎外掛

發佈外掛分為 distributiondistribution-base 外掛。

distribution-base 外掛新增一個名為 distributions 的擴充功能,類型為 DistributionContainer 至專案。

distribution 外掛應用 distribution-base 外掛,並在名為 main 的發佈容器擴充功能中建立單一發佈。

如果您的建置只產生一個發佈,您只需要配置發佈或依賴預設值。

用法

若要使用發佈外掛,請在您的建置腳本中包含以下內容

build.gradle.kts
plugins {
    distribution
}
build.gradle
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}")

工作

發佈外掛會將許多工作新增至您的專案,如下所示。

distZipZip

建立發佈內容的 ZIP 封存檔。

distTar工作

建立發佈內容的 TAR 封存檔。

assembleDist工作

相依於distTardistZip

建立發佈內容的 ZIP 和 TAR 封存檔。

installDistSync

組裝發佈內容並將其安裝在目前機器上。

對於您新增至專案的每個額外發佈,發佈外掛會新增以下工作,其中 distributionName 來自 Distribution.getName()

distributionNameDistZipZip

建立發佈內容的 ZIP 封存檔。

distributionNameDistTarTar

建立發佈內容的 TAR 封存檔。

assembleDistributionNameDist工作

相依於distributionNameDistTardistributionNameDistZip

建立發佈內容的 ZIP 和 TAR 封存檔。

installDistributionNameDistSync

組裝發佈內容並將其安裝在目前機器上。

以下範例建立一個 custom 發佈,這將導致將四個額外工作新增至專案:customDistZipcustomDistTarassembleCustomDistinstallCustomDist

build.gradle.kts
distributions {
    create("custom") {
        // configure custom distribution
    }
}
build.gradle
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 物件來新增其他檔案。

build.gradle.kts
distributions {
    main {
        distributionBaseName = "someName"
        distributionClassifier = "classifier"
        contents {
            from("src/readme")
        }
    }
}
build.gradle
distributions {
    main {
        distributionBaseName = 'someName'
        distributionClassifier = 'classifier'
        contents {
            from 'src/readme'
        }
    }
}

在上述範例中,src/readme 目錄的內容將包含在發佈中(以及預設新增的 src/main/dist 目錄中的檔案)。

distributionBaseNamedistributionClassifier 屬性也已變更。這將導致使用不同的名稱建立發佈封存檔。

build.gradle.kts
distributions {
    main {
        distributionBaseName = "someName"
        contents {
            into("bin/config") {
                from("config")
            }
            into("lib/samples") {
                from("samples")
            }
        }
    }
}
build.gradle
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 發佈

build.gradle.kts
plugins {
    `ivy-publish`
}

publishing {
    publications {
        create<IvyPublication>("myDistribution") {
            artifact(tasks.distZip.get())
            artifact(tasks["customDistTar"])
        }
    }
}
build.gradle
plugins {
    id 'ivy-publish'
}

publishing {
    publications {
        myDistribution(IvyPublication) {
            artifact distZip
            artifact customDistTar
        }
    }
}

同樣地,若要使用 Maven 發佈外掛 將發佈版本發佈到 Maven 儲存庫,請將其一個或兩個封存檔工作新增至 MavenPublication,如下所示

build.gradle.kts
plugins {
    `maven-publish`
}

publishing {
    publications {
        create<MavenPublication>("myDistribution") {
            artifact(tasks.distZip)
            artifact(tasks["customDistTar"])
        }
    }
}
build.gradle
plugins {
    id 'maven-publish'
}

publishing {
    publications {
        myDistribution(MavenPublication) {
            artifact distZip
            artifact customDistTar
        }
    }
}