<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          JCenter已經(jīng)提桶跑路,是時(shí)候?qū)W會(huì)上傳到Maven Central了

          共 4453字,需瀏覽 9分鐘

           ·

          2021-04-12 02:24

          點(diǎn)擊左上方[藍(lán)色小字],關(guān)注[國(guó)民程序員]

          每天滿(mǎn)滿(mǎn)的干貨

          我們之所以活得累,往往是因?yàn)榉挪幌旅孀觼?lái)做人。

          由于微信公眾號(hào)近期改變了推送規(guī)則如果你第一時(shí)間看到我的文章就置頂星標(biāo)公眾號(hào)。

          【文章目錄】

          1. JCenter提桶跑路

          2. 轉(zhuǎn)戰(zhàn)Maven Central

              Step1:準(zhǔn)備環(huán)境

              Step2:提交Issue

              Step3:配置

              Step4:上傳包(jar/aar)

          3. 一些注意事項(xiàng)

          4:示例工程


          1. JCenter提桶跑路

          用了這么多年的JCenter,終于要“跑路”了,還是有點(diǎn)依依不舍的。

          詳情可以參見(jiàn)本公眾號(hào)的這篇文章:

          JCenter提桶跑路了... ...


          以前也寫(xiě)過(guò)JCenter上傳的方法:

          《2020最新通過(guò)novoda上傳到JCenter的方法、技巧及遇到的坑》


          不過(guò)現(xiàn)在如果再想上傳包到JCenter已經(jīng)是不可以的了,提示如下:


          2. 轉(zhuǎn)戰(zhàn)Maven Central

          Google在 Android Studio 4.2 把Maven Central作為gradle的默認(rèn)配置了,所以我們還是把包放在官方指定的倉(cāng)庫(kù)中比較保險(xiǎn)。


          相比JCenter這樣的第三方倉(cāng)庫(kù),Maven Central的操作就稍顯復(fù)雜,不過(guò)我們只要把思路理清理順了,其實(shí)也沒(méi)有那么難操作。


          Step1:準(zhǔn)備環(huán)境

          OS: Windows10

          IDE: Android Studio 4.1.3

          Android Gradle Plugin Version: 4.1.3

          Gradle Version: 6.5

          GPG: Gpg4win-3.1.15


          Step2:提交Issue

          如果想要往Maven Central上傳包,首先需要提交一個(gè)Issue進(jìn)行申請(qǐng)。

          申請(qǐng)網(wǎng)址:https://issues.sonatype.org/secure/Dashboard.jspa

          如果沒(méi)有賬號(hào),請(qǐng)先注冊(cè)一個(gè),這個(gè)賬號(hào)跟后續(xù)登錄maven倉(cāng)庫(kù)網(wǎng)站是一樣的,需要注意。


          提交Issue需要選擇的類(lèi)型和填寫(xiě)的內(nèi)容如下圖紅框內(nèi)所示:

          這里需要特別注意Group Id,因?yàn)檫@涉及到域名,需要你擁有這個(gè)域名的所有權(quán),不能隨便填寫(xiě),否則驗(yàn)證不通過(guò)。


          如果沒(méi)有域名,你可以使用你在GitHub上注冊(cè)的賬號(hào),比如我這邊是github.com/ddnosh,那么我們申請(qǐng)的Group Id可以寫(xiě)成com.github.ddnosh。


          提交了Issue后,系統(tǒng)會(huì)馬上給你發(fā)送一個(gè)comment,讓你對(duì)Group Id進(jìn)行驗(yàn)證,比如我們用的是GitHub網(wǎng)站的域名,系統(tǒng)讓我們?cè)谫~號(hào)下新建一個(gè)項(xiàng)目以便驗(yàn)證這個(gè)Group Id是你的:

          如果是其它域名的話(huà),需要在域名下進(jìn)行驗(yàn)證,具體參考系統(tǒng)給你發(fā)的Comment。


          我們?cè)贕itHub上創(chuàng)建好這個(gè)項(xiàng)目后,在這個(gè)Issue下面留言讓它們?nèi)z測(cè),系統(tǒng)如果檢測(cè)成功,會(huì)發(fā)送如下信息:

          這樣我們就有權(quán)限去上傳包了,下一步我們介紹如何上傳包。


          Step3:配置

          官網(wǎng)也有介紹如何通過(guò)gradle上傳包的,參考如下文章:

          https://central.sonatype.org/pages/gradle.html

          不過(guò)我們今天介紹通過(guò)第三方的插件:Gradle Nexus Staging,進(jìn)行上傳。


          下面就介紹下配置的一些信息。


          首先,在項(xiàng)目根目錄的build.gradle中添加apply:


          apply plugin: ‘io.codearte.nexus-staging’


          然后在dependencies中添加兩個(gè)classpath:


          classpath ‘com.github.dcendents:android-maven-gradle-plugin:2.1’

          classpath

          ‘io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.30.0’


          接下來(lái)在項(xiàng)目的根目錄下添加一個(gè)專(zhuān)門(mén)用于上傳的gradle腳本,這里我們叫做publish-mavencentral.gradle,這是一個(gè)模板,可以直接拿來(lái)用,可以直接點(diǎn)擊查看:publish-mavencentral.gradle


          可以看到publish-mavencentral.gradle腳本里面有一些參數(shù)需要設(shè)定的,那么我們下面就是要定義這些參數(shù),為了安全起見(jiàn),這些參數(shù)我們?nèi)慷x在local.properties中:


          signing.keyId=AAAAAAAA

          signing.password=123

          signing.secretKeyRingFile=C:/android/xxx.gpg

          ##nexus賬號(hào)信息,也就是創(chuàng)建工單時(shí)的賬號(hào)和密碼

          ossrhUsername=xxx

          ossrhPassword=456



          后面的工作就是看看這5個(gè)參數(shù)如何設(shè)定的:

          ossrhUsername和ossrhPassword很簡(jiǎn)單,就是我們?cè)凇維tep2:提交Issue】中注冊(cè)的用戶(hù)名和密碼。


          signing相關(guān)的3個(gè)參數(shù)是跟我們包的簽名相關(guān)的,這里我們使用gpg4win,官網(wǎng)下載地址:https://www.gpg4win.org/index.html


          接下來(lái)我們就介紹下signing.keyId、signing.password、signing.secretKeyRingFile是怎么定義的。


          生成密鑰對(duì)

          gpg --gen-key

          signing.keyId我們只需要取最后的8位;

          signing.password就是我們?cè)谏擅荑€對(duì)過(guò)程中要求我們輸入的;


          如果需要查看keyId,可以輸入如下命令:


          gpg --list-key


          signing.secretKeyRingFile

          這個(gè)文件到底是什么文件呢?其實(shí)它就是gpg key的secret。

          那么怎么獲取呢?很簡(jiǎn)單,打開(kāi)安裝好的Gpg4win軟件,這里名字叫做Kleopatra:

          右鍵,選擇Backup Secret Keys…,保存為gpg格式的文件,然后這個(gè)文件的路徑就是signing.secretKeyRingFile的值。

          另外關(guān)于publish-mavencentral.gradle中的sdk包的版本號(hào),我們可以統(tǒng)一定義在根目錄的build.gradle文件的buildscript節(jié)點(diǎn)下,我們定義一個(gè)ext子節(jié)點(diǎn):

          ext {

                  versionName = '1.0.0'

                  versionCode = 1

                  kotlin_version = '1.4.31'

              }

          versionName就是sdk的版本號(hào),需要注意的是,如果versionName以SNAPSHOT結(jié)尾的話(huà),則會(huì)上傳到snapshot的服務(wù)器中。


          Step4:上傳包(jar/aar)

          經(jīng)過(guò)上面的準(zhǔn)備工作,我們接下來(lái)就進(jìn)入到激動(dòng)人心的時(shí)刻了,將我們的包上傳到Maven倉(cāng)庫(kù),是不是很心動(dòng)呢?

          打開(kāi)Android Studio右上角的Gradle,選擇圖示的publish,雙擊運(yùn)行即可。

          我們登錄:https://s01.oss.sonatype.org/,賬號(hào)密碼就是我們注冊(cè)Issue時(shí)的賬號(hào)密碼。

          我們選擇左側(cè)的Staging Repositories,可以看到我們剛剛上傳的包:

          我們選中自己的包,然后點(diǎn)擊"Close"按鈕:


          然后系統(tǒng)會(huì)幫我們對(duì)包進(jìn)行一系列的檢測(cè)工作,我們看到有一個(gè)錯(cuò)誤:


          Failed: Signature Validation


          意思是包簽名出錯(cuò)。原來(lái)我們本地用Gpg4win生成的密鑰對(duì),沒(méi)有將公鑰上傳到官網(wǎng)驗(yàn)證包指定的服務(wù)器地址,通過(guò)右側(cè)的日志我們也可以看到,系統(tǒng)對(duì)一些可以上傳公鑰的服務(wù)器進(jìn)行驗(yàn)證時(shí)沒(méi)有發(fā)現(xiàn)我們上傳的公鑰,于是就報(bào)錯(cuò)了。

          解決方案也很簡(jiǎn)單,就是從右側(cè)選一個(gè)服務(wù)器地址,將我們本地生成的公鑰上傳上去即可。

          上傳的命令如下:


          gpg --keyserver http://keys.openpgp.org:11371 --send-keys xxxxxxxx


          公鑰也是要最后8位即可。

          再次點(diǎn)擊"Close"后可以看到,一系列的驗(yàn)證成功了。

          然后我們點(diǎn)擊"Release"按鈕,將包正式地發(fā)布出去:

          包發(fā)布后,并不能馬上在Maven倉(cāng)庫(kù)看到,同樣需要審核。

          你會(huì)發(fā)現(xiàn)在原先的Issue里多了一個(gè)系統(tǒng)發(fā)送的Comment:

          也就是你在https://s01.oss.sonatype.org/中過(guò)個(gè)幾分鐘就可以搜到你的包,如圖的方式:

          但是要在真正的Maven倉(cāng)庫(kù)(也就是通過(guò)implementation方式引入的庫(kù)),還需要等待差不多2個(gè)小時(shí)。

          到時(shí)候你可以通過(guò)https://search.maven.org/查詢(xún)你的包,看看是否能查詢(xún)到,比如通過(guò)包名的方式:

          好了,把包上傳到Maven Central的方法介紹完成!!!


          3. 一些注意事項(xiàng)

          1. publish

          雙擊"publish"準(zhǔn)備上傳包的時(shí)候,腳本會(huì)到工程的build\outputs目錄下尋找包,而且是"-release"結(jié)尾的包:

          這個(gè)在"publish-mavencentral.gradle"腳本中有寫(xiě):

          所以我們?nèi)绻蟼餍碌陌_的步驟是先把sdk工程下的build目錄刪除,然后通過(guò)gradle腳本的assembleRelease重新打包release的包:

          release包打出來(lái)后再通過(guò)publish腳本上傳。

          2. 刪除Maven Central已上傳的包

          目前來(lái)說(shuō)網(wǎng)站沒(méi)有提供直接的方法刪除,國(guó)民程序員想到的方法有兩個(gè):

          (1) 通過(guò)Issue告訴管理者幫忙刪除

          (2) 重新發(fā)布一個(gè)versionName更高的版本

          關(guān)于刪除Maven Central包更多的討論,可以參考stackoverflow上的議題:

          https://stackoverflow.com/questions/9789611/removing-an-artifact-from-maven-central


          4:示例工程

          https://github.com/ddnosh/ARabbit

          工程里面有上述所有的操作步驟和文件,可以作為參考。



          ● 超完整的程序員技能圖譜,看完一定不會(huì)后悔!

           1700篇大廠(chǎng)面試真題珍藏版(每天更新)

           想要年薪百萬(wàn),你不能錯(cuò)過(guò)這套互聯(lián)網(wǎng)架構(gòu)師資料

          微信搜一搜
          國(guó)民程序員
          點(diǎn)分享
          點(diǎn)點(diǎn)贊
          點(diǎn)在看
          瀏覽 39
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲视频在线播放免费 | 亚洲AV第一页 | 国产福利乱伦 | 亚洲优质A片 | 自拍偷拍亚州第一 |