1、注冊sonatype賬号
首先前往【https://issues.sonatype.org】新增賬號
注冊需要填寫郵箱(重要,請填寫真實的郵箱)、名字、使用者名(重要,用于登入)、密碼(需要特别複雜的組合密碼),和驗證碼完成注冊。
2、建立Project工單
在頂部的欄目中找到建立按鈕
進入到建立問題頁面,基礎資訊安裝圖檔裡的描述填寫即可,
域名字首分兩種:
1)你沒有自己的域名,并且你的代碼托管在github上,你可以使用io.github.xxx來作為域名字首,xxx指你的github的賬号名稱,在建立完問題後,需要在你自己的github上面建立一個問題編号的空項目,用來給管理者驗證申請的這個github的歸屬權是你自己的(如下面的步驟3所示)。
2)如果有有自己的域名,或者想要注冊購買一個自己的域名(這裡以阿裡雲為例),你建立完問題後,首先在阿裡雲選擇一個自己滿意的域名并實名認證後購買。然後進入域名服務,點選域名清單裡你自己的域名,進入域名解析,選擇解析設定。然後點選添加記錄。
在添加記錄裡的記錄類型選中TXT,然後記錄值裡填寫你建立的那個問題的URL路徑,TTL選擇1天。
填寫完成這些資訊後,就可以create了,create完成後,你的單子會自動assign給從業人員
3.開通倉庫
從業人員會根據你填寫的GroupId的方式,來要求你配合完成一些驗證,會在comments裡面回複你,在這邊,我隻說明github的驗證方式,域名方式則可自行百度檢視驗證方式。
然後要求我們在自己的github賬号裡建立一個public的名稱為你這個Ticket的repository,很簡單,直接建立一個,注意 Repository名稱以及權限是public即可
我這邊報紅是因為這個名字已經建立過了,正常是不會有這問題的,可以忽略。
這樣就完成了,然後我們就可以立馬去剛剛的Ticket的comments裡面告訴從業人員,我們已經完成了這一步
接下來的步驟,我們就是等待了,等待從業人員回複完成即可進行下一步了,我在這一步等待的時間很快,應該不到半小時,至于為什麼要等待,可以檢視官網的解釋https://central.sonatype.org/faq/a-human/
到這一步,我們的Maven倉庫就已經可以使用了,使用這個位址進行登入https://s01.oss.sonatype.org,使用者名密碼就是你上面注冊的工單系統的賬密,接下來我們就可以準備我們需要上傳的庫了。
4.建立GPG簽名
GPG簽名主要是為了給需要釋出到maven central的包進行簽名,每個釋出上去的包都需要進行這個操作,為了接下來我們可以直接使用,我們是以我們先建立一個自己的GPG簽名。關于GPG的概念,大家可以自行學習。
下載下傳GPG
可以從以下位址進行下載下傳:Gpg4win - Get Gpg4win
https://www.gpg4win.org/get-gpg4win.html
下載下傳完成後,進行安裝,預設都下一步即可完成。
安裝完成後,在指令行中,可以檢視一下版本,來确認環境以及安裝是否成功
建立GPG密鑰
點選主界面菜單,建立秘鑰
點選第一個選項,建立個人秘鑰:
接下來輸入你的賬号、郵箱以及勾選Protect the generated key with a passphrase.(使 用密碼保護生成的密鑰)在進階設定裡可以設定更詳細的,例如過期時間,但過期時間不可 以太長,或報錯。
下一步,設定密碼,完成,在完成界面先不用急着上傳或備份,直接點選完成。 在主界面輕按兩下你建立的秘鑰,可以看到以下界面 請記住下邊紅框圈住的8位字母,複制下來,一會要用。點選生成吊銷證書按鈕,儲存下來 你的吊銷證書
然後回到主界面點選右鍵,點選Backup Secret Keys 生成.gpg結尾的的密鑰,後面上傳是需要用到
然後在對應的證書右鍵點在伺服器上釋出,但是往往都是不成功的,
一般會提示以下的錯誤
那要怎麼處理呢,替換上傳的連結
gpg --keyserver keyserver.ubuntu.com --send-keys 【your public key】
gpg --keyserver keys.openpgp.org --send-keys 【your public key】
gpg --keyserver pgp.mit.edu --send-keys 【your public key】
上面的【your public key】替換為之前要儲存的8位字母,一般情況這3個中肯定有一個是可以上傳成功的。
發生成功你對應的郵箱會收到來自:keyserver的郵件,大緻意思是說我為綁定郵箱資訊,讓我去綁定,具體看收到的郵件提示進行操作。進行綁定後又會收到另外一條綁定成功的郵件。
對應的證書上傳成功後,開始上傳對應的項目。
5.As中的配置
- 在需要上傳的lib裡的build.gradle檔案裡的頂部增加配置
apply from: 'publish.gradle'
- 然後在同一目錄底下建立一個publish.gradle檔案,然後把下面的内容複制進去
publish.gradle檔案:
apply plugin: 'maven-publish'
apply plugin: 'signing'
task androidSourcesJar(type: Jar) {
classifier = 'sources'
from android.sourceSets.main.java.source
exclude "**/R.class"
exclude "**/BuildConfig.class"
}
ext {path=
PUBLISH_GROUP_ID = '之前注冊申請的域名,如果是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) {
// The coordinates of the library, being set from variables that
// we'll set up in a moment
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 = 'maven_test項目描述-需要修改成你自己的'
// If your project has a dedicated site, use its URL here
url = 'github位址需要修改成你自己的'
licenses {
license {
//協定類型,一般預設Apache License2.0的話不用改:
name = 'The Apache License, Version 2.0'
url = 'http://www.apache.org/licenses/LICENSE-2.0.txt'
}
}
developers {
developer {
id = '這裡sonatype使用者名修改為自己的'
name = '這裡sonatype名字修改為自己的'
email = '這裡sonatype注冊郵箱'
}
}
// 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/xxx.git'
//分支位址:
url = 'https://github.com/xxx/xxx/tree/main'
}
// 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 = "mavenCentral"
def releasesRepoUrl = "https://s01.oss.sonatype.org/content/repositories/releases/"
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
}
6、上傳開源庫
- 在需要上傳時,在local.properties檔案裡寫入下面内容,上傳完删掉(這些個人配置不要公開)
signing.keyId=5D31B52D //擷取的秘鑰後8位
signing.password=xxxx //注冊時GPG中設定的密碼
signing.secretKeyRingFile=E\:/xxx/.../xxx.gpg //生成的.gpg結尾的密鑰檔案目錄
ossrhUsername=XXX //sonatype使用者名
ossrhPassword=XXX //sonatype密碼
- 找到想要上傳的lib的task,輕按兩下運作assemble編譯。
- 上一步運作結束後輕按兩下運作publishReleasePublicationToMavenLocalRepository上傳aar,提示成功後即上傳成功
如果上傳成功了在sonatype裡也會收到從業人員的回複資訊:
- 檢視是否上傳成功
意思就是你的庫上傳成功了,過一會可以在
Central Repository:
https://repo1.maven.org/maven2/
這個位址中查到你自己的庫, 在這個連接配接後面對應的PUBLISH_GROUP_ID對應的路徑,.用/代替,就能看對你對應的庫
PUBLISH_GROUP_ID = '之前注冊申請的域名,如果是github的則是io.github.xxx'
PUBLISH_ARTIFACT_ID = '庫的名稱'
PUBLISH_VERSION = '庫的版本'
像我的,是這樣的,能查的到,就代表上傳成功了,可以進行引用了。
還可以在這個https://search.maven.org/ Maven Central Repository Search 連接配接中通過搜尋你自己的域名或者對呀的GitHub對應io.github.xxx即可找到,不過這時間可能會比較久
7.AS對庫的引用
在項目頂部的build.gradle檔案中,進行引用,對呀的路徑為
PUBLISH_GROUP_ID:PUBLISH_ARTIFACT_ID:PUBLISH_VERSION
域名:庫的名稱:庫的版本
8.注意事項
有的并不能很順利的使用GPG來進行生成對應的證書,則可以采用cmd來進行生成,可以參考對應的文章釋出Android Lib庫(Jar、AAR、SO)到Maven Central,全面避坑教程_xiaozeiqwe的專欄-CSDN部落格本文主要以Gradle Maven Publish插件的方式進行釋出到Maven Central的流程進行說明,附帶了手動釋出的流程、so庫的釋出流程、不上傳源碼和doc的釋出流程,并提及說明了釋出Jar包和釋出aar包的不同方式、Java與Kotlin版本的不同打包方式。
https://blog.csdn.net/xiaozeiqwe/article/details/117379335