天天看點

項目釋出到MavenCentral的流程

1、注冊sonatype賬号

首先前往【https://issues.sonatype.org】新增賬號

項目釋出到MavenCentral的流程

注冊需要填寫郵箱(重要,請填寫真實的郵箱)、名字、使用者名(重要,用于登入)、密碼(需要特别複雜的組合密碼),和驗證碼完成注冊。

2、建立Project工單

在頂部的欄目中找到建立按鈕

項目釋出到MavenCentral的流程

進入到建立問題頁面,基礎資訊安裝圖檔裡的描述填寫即可,

項目釋出到MavenCentral的流程
項目釋出到MavenCentral的流程

域名字首分兩種:

1)你沒有自己的域名,并且你的代碼托管在github上,你可以使用io.github.xxx來作為域名字首,xxx指你的github的賬号名稱,在建立完問題後,需要在你自己的github上面建立一個問題編号的空項目,用來給管理者驗證申請的這個github的歸屬權是你自己的(如下面的步驟3所示)。

項目釋出到MavenCentral的流程

2)如果有有自己的域名,或者想要注冊購買一個自己的域名(這裡以阿裡雲為例),你建立完問題後,首先在阿裡雲選擇一個自己滿意的域名并實名認證後購買。然後進入域名服務,點選域名清單裡你自己的域名,進入域名解析,選擇解析設定。然後點選添加記錄。

項目釋出到MavenCentral的流程

在添加記錄裡的記錄類型選中TXT,然後記錄值裡填寫你建立的那個問題的URL路徑,TTL選擇1天。

項目釋出到MavenCentral的流程

填寫完成這些資訊後,就可以create了,create完成後,你的單子會自動assign給從業人員 

項目釋出到MavenCentral的流程

3.開通倉庫

       從業人員會根據你填寫的GroupId的方式,來要求你配合完成一些驗證,會在comments裡面回複你,在這邊,我隻說明github的驗證方式,域名方式則可自行百度檢視驗證方式。

項目釋出到MavenCentral的流程

然後要求我們在自己的github賬号裡建立一個public的名稱為你這個Ticket的repository,很簡單,直接建立一個,注意 Repository名稱以及權限是public即可 

項目釋出到MavenCentral的流程
項目釋出到MavenCentral的流程

 我這邊報紅是因為這個名字已經建立過了,正常是不會有這問題的,可以忽略。

這樣就完成了,然後我們就可以立馬去剛剛的Ticket的comments裡面告訴從業人員,我們已經完成了這一步

項目釋出到MavenCentral的流程

接下來的步驟,我們就是等待了,等待從業人員回複完成即可進行下一步了,我在這一步等待的時間很快,應該不到半小時,至于為什麼要等待,可以檢視官網的解釋https://central.sonatype.org/faq/a-human/

項目釋出到MavenCentral的流程

到這一步,我們的Maven倉庫就已經可以使用了,使用這個位址進行登入https://s01.oss.sonatype.org,使用者名密碼就是你上面注冊的工單系統的賬密,接下來我們就可以準備我們需要上傳的庫了。

4.建立GPG簽名

GPG簽名主要是為了給需要釋出到maven central的包進行簽名,每個釋出上去的包都需要進行這個操作,為了接下來我們可以直接使用,我們是以我們先建立一個自己的GPG簽名。關于GPG的概念,大家可以自行學習。

下載下傳GPG

可以從以下位址進行下載下傳:Gpg4win - Get Gpg4win

項目釋出到MavenCentral的流程

https://www.gpg4win.org/get-gpg4win.html

項目釋出到MavenCentral的流程

下載下傳完成後,進行安裝,預設都下一步即可完成。

項目釋出到MavenCentral的流程

安裝完成後,在指令行中,可以檢視一下版本,來确認環境以及安裝是否成功

建立GPG密鑰

點選主界面菜單,建立秘鑰

項目釋出到MavenCentral的流程

點選第一個選項,建立個人秘鑰:

項目釋出到MavenCentral的流程
項目釋出到MavenCentral的流程

 接下來輸入你的賬号、郵箱以及勾選Protect the generated key with a passphrase.(使 用密碼保護生成的密鑰)在進階設定裡可以設定更詳細的,例如過期時間,但過期時間不可 以太長,或報錯。

項目釋出到MavenCentral的流程

 下一步,設定密碼,完成,在完成界面先不用急着上傳或備份,直接點選完成。 在主界面輕按兩下你建立的秘鑰,可以看到以下界面 請記住下邊紅框圈住的8位字母,複制下來,一會要用。點選生成吊銷證書按鈕,儲存下來 你的吊銷證書

項目釋出到MavenCentral的流程

 然後回到主界面點選右鍵,點選Backup Secret Keys 生成.gpg結尾的的密鑰,後面上傳是需要用到

項目釋出到MavenCentral的流程

 然後在對應的證書右鍵點在伺服器上釋出,但是往往都是不成功的,

項目釋出到MavenCentral的流程

 一般會提示以下的錯誤

項目釋出到MavenCentral的流程

 那要怎麼處理呢,替換上傳的連結

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的郵件,大緻意思是說我為綁定郵箱資訊,讓我去綁定,具體看收到的郵件提示進行操作。進行綁定後又會收到另外一條綁定成功的郵件。

項目釋出到MavenCentral的流程

對應的證書上傳成功後,開始上傳對應的項目。

5.As中的配置

  • 在需要上傳的lib裡的build.gradle檔案裡的頂部增加配置

apply from: 'publish.gradle'

項目釋出到MavenCentral的流程
  •  然後在同一目錄底下建立一個publish.gradle檔案,然後把下面的内容複制進去
項目釋出到MavenCentral的流程

 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檔案裡寫入下面内容,上傳完删掉(這些個人配置不要公開)
項目釋出到MavenCentral的流程
signing.keyId=5D31B52D     //擷取的秘鑰後8位
 signing.password=xxxx    //注冊時GPG中設定的密碼
 signing.secretKeyRingFile=E\:/xxx/.../xxx.gpg  //生成的.gpg結尾的密鑰檔案目錄
 ossrhUsername=XXX       //sonatype使用者名
 ossrhPassword=XXX       //sonatype密碼
           
  • 找到想要上傳的lib的task,輕按兩下運作assemble編譯。 
項目釋出到MavenCentral的流程
  • 上一步運作結束後輕按兩下運作publishReleasePublicationToMavenLocalRepository上傳aar,提示成功後即上傳成功 
項目釋出到MavenCentral的流程

 如果上傳成功了在sonatype裡也會收到從業人員的回複資訊:

項目釋出到MavenCentral的流程
  • 檢視是否上傳成功

意思就是你的庫上傳成功了,過一會可以在

Central Repository:

項目釋出到MavenCentral的流程

https://repo1.maven.org/maven2/

這個位址中查到你自己的庫, 在這個連接配接後面對應的PUBLISH_GROUP_ID對應的路徑,.用/代替,就能看對你對應的庫

PUBLISH_GROUP_ID = '之前注冊申請的域名,如果是github的則是io.github.xxx'
    PUBLISH_ARTIFACT_ID = '庫的名稱'
    PUBLISH_VERSION = '庫的版本'
           

 像我的,是這樣的,能查的到,就代表上傳成功了,可以進行引用了。

項目釋出到MavenCentral的流程

還可以在這個https://search.maven.org/ Maven Central Repository Search 連接配接中通過搜尋你自己的域名或者對呀的GitHub對應io.github.xxx即可找到,不過這時間可能會比較久

項目釋出到MavenCentral的流程

7.AS對庫的引用

在項目頂部的build.gradle檔案中,進行引用,對呀的路徑為

項目釋出到MavenCentral的流程

  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版本的不同打包方式。

項目釋出到MavenCentral的流程

https://blog.csdn.net/xiaozeiqwe/article/details/117379335

繼續閱讀