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 發佈中的配置主要有四種:
- 一個component - 通過 MavenPublication.from(org.gradle.api.component.SoftwareComponent).
- Custom artifacts — 通過 MavenPublication.artifact(java.lang.Object) 方法. 查看MavenArtifact 獲取所有可配置選項。
- 標準元數據,例如
artifactId
,groupId
andversion
. - POM文件的其他內容 — 通過 MavenPublication.pom(org.gradle.api.Action).
倉庫 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
中會生成對應的任務,如下圖所示: