Gradle插件之maven-publish:發佈android library到maven倉庫

maven插件已經過時,官方推薦使用這個插件來實現將我們的代碼發佈到 Apache Maven倉庫的功能。

使用

plugins {
    id 'maven-publish'
}

任務 Tasks

所有以下任務都歸在名爲publishing類型爲PublishingExtension的擴展下。

generatePomFileForPubNamePublication

爲名爲PubName的發佈創建一個POM文件,填充已知元數據,如項目名稱、項目版本和依賴項。生成的POM文件默認放在*build/publications/$pubName/pom-default.xml*.

**publishPubNamePublicationToRepoNameRepository **

將名爲PubName的發佈發佈到名爲RepoName的存儲庫中。如果您有一個沒有顯式名稱的存儲庫定義,那麼RepoName將是Maven

**publishPubNamePublicationToMavenLocal **

PubName發佈複製到本地Maven緩存—通常是*$USER_HOME/.m2/repository*——連同發佈的POM文件和其他元數據一起。

publish

依賴於所有publishPubNamePublicationToRepoNameRepository任務

將所有已定義的發佈發佈到所有已定義存儲庫的聚合任務。它不包括將發佈複製到本地Maven緩存。

publishToMavenLocal

依賴於所有publishPubNamePublicationToMavenLocal任務

將所有已定義的發佈複製到本地Maven緩存,包括它們的元數據(POM文件等)。

發佈 Publications

Maven 發佈中的配置主要有四種:

倉庫 Repositories

publishing {
    repositories {
        maven {
            // 基於版本名稱選擇不同的倉庫地址
            def releasesRepoUrl = "$buildDir/repos/releases"
            def snapshotsRepoUrl = "$buildDir/repos/snapshots"
            // url是必須要配置的
            url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
            // 倉庫用戶名密碼
            credentials {
                username = "root"
                password = "root"
            }
        }
    }
}

完整例子

apply plugin: 'maven-publish'

task generateSourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier 'sources'
}

def versionName = "2.7.0-SNAPSHOT"

publishing {
    publications {
        // 定義一個名爲 Production 的發佈
        Production(MavenPublication) {
            // 使用方引用 implementation 'cn.com.jack:mavendemo:2.7.0-SNAPSHOT'
            groupId = "cn.com.jack"
            artifactId = "mavendemo"
            version = versionName
            // 必須有這個 否則不會上傳AAR包
            afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) }
            // 上傳source,這樣使用方可以看到方法註釋
            artifact generateSourcesJar
        }
    }
    repositories {
        // 定義一個 maven 倉庫
        maven {
            // 可以有且僅有一個倉庫不指定 name 屬性,會隱式設置爲 Maven
            // 根據 versionName 來判斷倉庫地址
            url = versionName.endsWith('SNAPSHOT') ? SNAPSHOT_REPOSITORY_URL : RELEASE_REPOSITORY_URL
            // 倉庫用戶名密碼
            credentials {
                username = "root"
                password = "root"
            }
        }
        // 定義第二個 maven 倉庫,名爲 Nexus
        maven {
            // 必須顯示指定 name
            name = "nexus"
            url = versionName.endsWith('SNAPSHOT') ? SNAPSHOT_REPOSITORY_URL : RELEASE_REPOSITORY_URL
        }
    }
}

Gradle Tool Window中會生成對應的任務,如下圖所示:

官方文檔 Maven Publish Plugin

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章