前言:
將 aar庫 發(fā)布到 MavenCentral有以下幾步:
- 去 sonatype 注冊(cè)賬號(hào)并創(chuàng)建問題,最終至問題結(jié)果為“已修復(fù)”
- 下載 GnuPG 創(chuàng)建密鑰,將密鑰保存至本地并將公鑰發(fā)送至公鑰服務(wù)器
- 在AndroidStudio上配置好 sonatype 信息及 GnuPG 簽名,提交 aar庫 至 nexus 暫存
- 使用 sonatype 賬號(hào)登錄 nexus 查看上傳的aar庫姻乓,確認(rèn)無誤后完成發(fā)布。
- 發(fā)布完成玩郊,審核通過后可在 https://search.maven.org/ 搜索查看枚尼。
- 完結(jié)撒花~
-
接下來將詳細(xì)說明每個(gè)步驟
一:去 sonatype 注冊(cè)賬號(hào)并創(chuàng)建問題,最終至問題結(jié)果為“已修復(fù)”
1.1 第一次需要先注冊(cè)賬號(hào)
1.2 創(chuàng)建Project工單
-
注:對(duì)于 Group Id 不清楚怎么配置自己的域名更胖,可以參考這里:https://blog.csdn.net/u012693479/article/details/120508108
1.3 開通倉庫
創(chuàng)建好工單后铛铁,根據(jù)評(píng)論提示在個(gè)人倉庫創(chuàng)建一個(gè)項(xiàng)目用于校驗(yàn),例如我的是創(chuàng)建名稱為“OSSRH-80195”項(xiàng)目
1.4 github 創(chuàng)建<OSSRH-80195>工程
1.4 以上準(zhǔn)備工作都完成后却妨,回復(fù)下評(píng)論饵逐,待管理員審核
1.5 審核通過后,項(xiàng)目狀態(tài)會(huì)變成:已解決
二:下載 GnuPG 并創(chuàng)建GPG簽名保存至本地待使用
2.1 按照下面指引下載 GnuPG exe文件下載彪标,默認(rèn)安裝即可倍权。
2.2 安裝 gpg 完成之后,可以在cmd 命令行查看是否安裝成功
2.3 創(chuàng)建密鑰捞烟,通過 cmd 命令行創(chuàng)建并發(fā)布公鑰至公鑰服務(wù)器账锹,想通過 gpg exe程序操作點(diǎn) 這里
注:網(wǎng)上有人是直接通過“Kleopatra.exe”程序界面操作的,不過我在最后一步“在服務(wù)器上發(fā)布...”一直發(fā)布失敗坷襟,所以就通過命令行的方式操作,如果有知道如何解決的大佬可以評(píng)論區(qū)留言哈生年,感謝~婴程。
報(bào)錯(cuò)如下:
gpg.exe 的輸出為:gpg: sending key 231883C5xxxxxxxx to hkps://keyserver.ubuntu.com gpg: keyserver send failed: Certificate expired gpg: keyserver send failed: Certificate expired
-
2.3.1 生成密鑰
gpg --gen-key
-
2.3.2 查看密鑰
gpg --list-key
-
2.3.3 導(dǎo)出密鑰
如果gradle簽名的時(shí)候報(bào)密鑰文件中找不到指定的 key ID的key的錯(cuò)誤,此時(shí)可以手動(dòng)導(dǎo)出
gpg --export-secret-keys > 某盤:\...\gnupg\secring.gpg
-
2.3.4 公鑰發(fā)送至公鑰服務(wù)器
keyserver.ubuntu.com
keys.openpgp.org
pgp.mit.edu
各個(gè)公鑰服務(wù)器之間互相同步需要一定時(shí)間抱婉,可以提前發(fā)送到這三個(gè)服務(wù)器档叔,查看最新服務(wù)器地址點(diǎn) 這里桌粉。
gpg --keyserver keyserver.ubuntu.com --send-keys keyId
gpg --keyserver keys.openpgp.org --send-keys keyId
gpg --keyserver pgp.mit.edu --send-keys keyId
注:以上三個(gè)服務(wù)器地址只要保證其中一個(gè)發(fā)送成功即可
-
2.3.6 查詢公鑰是否上傳成功
gpg --keyserver hkp://pool.sks-keyservers.net --search-keys keyId
gpg --keyserver hkp://pgp.mit.edu --search-keys keyId
gpg --keyserver hkp://keyserver.ubuntu.com --search-keys keyId
三:在AndroidStudio上配置好 sonatype 信息及 GnuPG 簽名,提交 aar庫 至 nexus 暫存
3.1 在項(xiàng)目根目錄創(chuàng)建一個(gè)新的"xxx.gradle"文件衙四,用于maven上傳铃肯,并添加如下代碼。
我這里取的文件名是:publish-mavencentral.gradle
apply plugin: 'maven-publish'
apply plugin: 'signing'
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.source
exclude "**/R.class" //排除`R.class`
exclude "**/BuildConfig.class" //排除`BuildConfig.class`
}
//--- 修改配置一 ---
ext {path=
PUBLISH_GROUP_ID = '之前注冊(cè)sonatype時(shí)填寫的的的groupId域名传蹈,如果是github的則是io.github.xxx'
PUBLISH_ARTIFACT_ID = '庫的名稱'
PUBLISH_VERSION = '庫的版本'
}
//--- 修改配置二 ---
ext["signing.keyId"] = ''
ext["signing.password"] = ''
ext["signing.secretKeyRingFile"] = ''
ext["ossrhUsername"] = ''
ext["ossrhPassword"] = ''
File secretPropsFile = project.rootProject.file('local.properties')
if (secretPropsFile.exists()) {
println "Found secret props file, loading props"
Properties p = new Properties()
p.load(new FileInputStream(secretPropsFile))
p.each { name, value ->
ext[name] = value
}
} else {
println "No props file, loading env vars"
}
publishing {
publications {
release(MavenPublication) {
println("publish-maven Log-------> PUBLISH_GROUP_ID: $PUBLISH_GROUP_ID; PUBLISH_ARTIFACT_ID: $PUBLISH_ARTIFACT_ID; PUBLISH_VERSION: $PUBLISH_VERSION")
// The coordinates of the library, being set from variables that
// we'll set up in a moment
//配置一傳入的參數(shù)
groupId PUBLISH_GROUP_ID
artifactId PUBLISH_ARTIFACT_ID
version PUBLISH_VERSION
// Two artifacts, the `aar` and the sources
artifact("$buildDir/outputs/aar/${project.getName()}-release.aar")
artifact androidSourcesJar
// Self-explanatory metadata for the most part
pom {
//--- 修改配置三 ---
name = PUBLISH_ARTIFACT_ID
description = '上傳aar插件至mavencentral押逼,方便使用implementation快速引入' //添加文件描述
// If your project has a dedicated site, use its URL here
url = 'https://github.com/xxx/xxxx' //項(xiàng)目github鏈接
licenses {
license {
//協(xié)議類型,一般默認(rèn)Apache License2.0的話不用改:
name = 'The Apache License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
//--- 修改配置四 ---
id = '用戶ID' //你的sonatype用戶ID
name = '用戶名' //你的sonatype用戶名
email = '郵箱' //你的sonatype注冊(cè)郵箱
}
}
// Version control info, if you're using GitHub, follow the format as seen here
scm {
//--- 修改配置五 ---
//修改成你的Git地址:
connection = 'scm:git:github.com/xxx/xxxx.git'
developerConnection = 'scm:git:ssh://github.com/xxx/xxxx.git'
//分支地址:
url = 'https://github.com/xxx/xxxx/tree/master'
}
// A slightly hacky fix so that your POM will include any transitive dependencies
// that your library builds upon
withXml {
def dependenciesNode = asNode().appendNode('dependencies')
project.configurations.implementation.allDependencies.each {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
}
}
}
}
}
repositories {
// The repository to publish to, Sonatype/MavenCentral
maven {
// This is an arbitrary name, you may also use "mavencentral" or
// any other name that's descriptive for you
//--- 修改配置六 ---
name = "項(xiàng)目名稱"
def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
// You only need this if you want to publish snapshots, otherwise just set the URL
// to the release repo directly
url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl
// The username and password we've fetched earlier
credentials {
username ossrhUsername
password ossrhPassword
}
}
}
}
signing {
sign publishing.publications
}
針對(duì)以上代碼惦界,有幾處需要修改成自己的配置信息
-
3.1.1 修改配置一:填入需要使用 implementation 引入aar的格式
ext {path=
PUBLISH_GROUP_ID = '之前注冊(cè)sonatype時(shí)填寫的的的groupId域名挑格,如果是github的則是io.github.xxx'
PUBLISH_ARTIFACT_ID = '庫的名稱'
PUBLISH_VERSION = '庫的版本'
}
//以上三個(gè)參數(shù)分別對(duì)應(yīng)的是 implementation 'io.github.Junkmer:JRouter:0.0.1' 冒號(hào)從左往右分割的三部分
-
3.1.2 修改配置二:在項(xiàng)目的根目錄local.properties文件中增加如下配置
signing.keyId=5D31B52D #剛才獲取的秘鑰后8位
signing.password=xxxx #創(chuàng)建GPG秘鑰時(shí)設(shè)置的密碼
signing.secretKeyRingFile=.../xxx.gpg #生成的.gpg結(jié)尾的密鑰文件目錄
ossrhUsername=XXX #sonatype用戶名
ossrhPassword=XXX #sonatype密碼
-
3.1.3 修改配置三:配置項(xiàng)目描述和項(xiàng)目GitHub地址
name = PUBLISH_ARTIFACT_ID //使用配置一中的"庫名稱"參數(shù)
description = '上傳aar插件至mavencentral,方便使用implementation快速引入' //添加文件描述
url = 'https://github.com/xxx/xxxx' //項(xiàng)目github鏈接
-
3.1.4 修改配置四: 填寫在 sonatype 注冊(cè)的賬號(hào)信息
id = '用戶ID' //你的sonatype用戶ID
name = '用戶名' //你的sonatype用戶名
email = '郵箱' //你的sonatype注冊(cè)郵箱
-
3.1.5 修改配置五:將模板中的"xxx/xxxx"替換成自己的github項(xiàng)目真實(shí)地址
//修改成你的Git地址:
connection = 'scm:git:github.com/xxx/xxxx.git'
developerConnection = 'scm:git:ssh://github.com/xxx/xxxx.git'
//分支地址:
url = 'https://github.com/xxx/xxxx/tree/master'
-
3.1.6 修改配置六:配置項(xiàng)目名稱和發(fā)布地址
name = "項(xiàng)目名稱" //填寫在github創(chuàng)建的項(xiàng)目名稱
def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/"
def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/"
注:由于 https://oss.sonatype.org 不再維護(hù)沾歪,新地址修改成 https://s01.oss.sonatype.org漂彤,想查看最新地址點(diǎn) 這里
3.2 執(zhí)行aar打包和上傳
-
3.2.1 aar如何打包可以看之前寫的 AndroidStudio 打包 Android項(xiàng)目 成 aar 這篇文章
-
3.2.2 上傳 aar 至 MavenCentral
先在需要打包上傳的module下的build.gradle,添加以下代碼:
apply from: "${rootProject.projectDir}/publish-mavencentral.gradle"
-
3.2.3 以上都配置好后灾搏,在AndroidStudio右側(cè)的gradle tasks中找到要提交的module挫望,點(diǎn)擊“4”任務(wù)。
-
3.2.3 上傳成功狂窑,控制臺(tái)會(huì)有如下打印媳板,然后就可以在 nexus 上查看了
四:使用 sonatype 賬號(hào)登錄 nexus 查看上傳的aar庫,確認(rèn)無誤后完成發(fā)布蕾域。
4.1 登錄 nexus
4.2 確認(rèn)aar庫無誤后拷肌,點(diǎn)擊 "release" 按鈕提交審核。
五:發(fā)布完成旨巷,審核通過后可在 https://search.maven.org/ 搜索查看巨缘。
六:完結(jié)撒花~
特別感謝:
- Android:發(fā)布aar包到maven倉庫以及 maven插件 和 maven-publish 插件的區(qū)別 - 掘金
- 發(fā)布android庫AAR至mavenCentral看這篇文章就可以了 - 知乎
- 項(xiàng)目發(fā)布到MavenCentral的流程_天蘭之珠的博客-CSDN博客
- Android庫發(fā)布至MavenCentral流程詳解 - 掘金
- Android庫發(fā)布到Maven Central全攻略 - 小專欄
- 發(fā)布Android Lib庫(Jar、AAR采呐、SO)到Maven Central_卡卡爾的博客-CSDN博客
- Android發(fā)布庫(jar/aar)到MavenCentral_殤神馬的博客-CSDN博客_android 發(fā)布庫
- Android庫發(fā)布到Maven Central超詳細(xì)攻略 - 簡書
- Maven發(fā)布 錯(cuò)誤集錦_錯(cuò)過了唄的博客-CSDN博客