如何上傳library到j(luò)center

如何上傳library到j(luò)center
我相信你已經(jīng)知道了倉庫系統(tǒng)的大體工作原理。現(xiàn)在我們來開始最重要的部分:上傳。這個(gè)任務(wù)和如何上傳library文件到http://jcenter.bintray.com一樣簡(jiǎn)單。如果做到,這個(gè)library就算發(fā)布了。好吧,有兩個(gè)需要考慮:如何創(chuàng)建aar文件以及如何上傳構(gòu)建的文件到倉庫。
雖然需要若干步驟,但是我還是想強(qiáng)調(diào)這事并不復(fù)雜,因?yàn)橐呀?jīng)準(zhǔn)備好了所有事情。整個(gè)過程如下圖:


因?yàn)榧?xì)節(jié)比較多,我分為7部分,一步一步的詳細(xì)解釋清楚。
第一部分:在bintray上創(chuàng)建package
首先,你需要在bintray上創(chuàng)建一個(gè)package。為此,你需要一個(gè)bintray賬號(hào),并在網(wǎng)站上創(chuàng)建一個(gè)package。
第一步:在bintray.com上注冊(cè)一個(gè)賬號(hào)。(注冊(cè)過程很簡(jiǎn)單,自己完成)
第二步:完成注冊(cè)之后,登錄網(wǎng)站,然后點(diǎn)擊maven。

第三步:點(diǎn)擊Add New Package,為我們的library創(chuàng)建一個(gè)新的package。

第四步:輸入所有需要的信息

雖然如何命名包名沒有什么限定,但是也有一定規(guī)范。所有字母應(yīng)該為小寫,單詞之間用-分割,比如,fb-like。
當(dāng)每項(xiàng)都填完之后,點(diǎn)擊Create Package。
第五步:網(wǎng)頁將引導(dǎo)你到 Package編輯頁面。點(diǎn)擊 Edit Package文字下的Package名字,進(jìn)入Package詳情界面。

完工!現(xiàn)在你有了自己在Bintray上的Maven倉庫,可以準(zhǔn)備上傳library到上面了。

Bintray賬戶的注冊(cè)就完成了。下一步是Sonatype,Maven Central 的提供者。

第二部分:為Maven Central創(chuàng)建個(gè)Sonatype帳號(hào)
注:如果你不打算把library上傳到Maven Central,可以跳過第二和第三部分。不過我建議你不要跳過,因?yàn)槿匀挥性S多開發(fā)者在使用這個(gè)倉庫。
和jcenter一樣,如果你想通過Maven Central,貢獻(xiàn)自己的library,你需要在提供者的網(wǎng)站Sonatype上注冊(cè)一個(gè)帳號(hào)。
你需要知道的就是這個(gè)帳號(hào),你需要在Sonatype網(wǎng)站上創(chuàng)建一個(gè)IRA Issue Tracker 帳號(hào)。請(qǐng)到Sonatype Dashboard 注冊(cè)這個(gè)帳號(hào)。
完成之后。你需要請(qǐng)求得到貢獻(xiàn)library到Maven Central的權(quán)限。不過這個(gè)過程對(duì)我來說有點(diǎn)無厘頭,因?yàn)槟阈枰龅木褪窃贘IRA中創(chuàng)建一個(gè)issue,讓它們?cè)试S你上傳匹配Maven Central提供的GROUP_ID的library。
要?jiǎng)?chuàng)建上述所講到的issue,訪問Sonatype Dashboard,用創(chuàng)建的帳號(hào)登錄。然后點(diǎn)擊頂部菜單的Create。
填寫如下信息:
Project: Community Support - Open Source Project Repository Hosting
Issue Type: New Project
Summary: 你的 library名稱的概要,比如The Cheese Library。
Group Id: 輸入根GROUP_ID,比如,com.inthecheeselibrary 。一旦批準(zhǔn)之后,每個(gè)以com.inthecheeselibrary開始的library都允許被上傳到倉庫,比如com.inthecheeselibrary.somelib。
Project URL: 輸入任意一個(gè)你想貢獻(xiàn)的library的URL,比如, https://github.com/nuuneoi/FBLikeAndroid。
SCM URL: 版本控制的URL,比如 https://github.com/nuuneoi/FBLikeAndroid.git

其余的不用管,然后點(diǎn)擊Create?,F(xiàn)在是最難的部分...耐心等待...平均大概1周左右,你會(huì)獲準(zhǔn)把自己的library分享到 Maven Central。
最后一件事是在Bintray Profile的帳戶選項(xiàng)中填寫自己的Sonatype OSS用戶名。


點(diǎn)擊Update,完成。
第三部分:?jiǎn)⒂胋intray里的自動(dòng)注冊(cè)
就如我上面提到的,我們可以通過jcenter上傳library到Maven Central ,不過我們需要先注冊(cè)這個(gè)library。bintray提供了通過用戶界面讓library一旦上傳后自動(dòng)注冊(cè)的機(jī)制。
第一步是使用下面的命令行產(chǎn)生一個(gè)key。(如果你用的是windows,請(qǐng)?jiān)?a target="_blank" rel="nofollow">cygwin下做這件事情)
gpg --gen-key

有幾個(gè)必填項(xiàng)。部分可以采用默認(rèn)值,但是某些項(xiàng)需要你自己輸入恰當(dāng)?shù)膬?nèi)容,比如,你的真實(shí)名字,密碼 等等。
創(chuàng)建了key之后,調(diào)用如下的命令查看被創(chuàng)建key的信息。
gpg --list-keys

如果沒沒問題的話,可以看到下面的信息:
pub 2048R/01ABCDEF 2015-03-07uid Sittiphol Phanvilai yourmail@email.comsub 2048R/98765432 2015-03-07

現(xiàn)在你需要把key上傳到keyserver讓它發(fā)揮作用。為此,請(qǐng)調(diào)用如下的命令并且將其中的PUBLIC_KEY_ID替換成上面pub一行中2048R/ 后面的 8位16進(jìn)制值,譬如本例是01ABCDEF。
gpg --keyserver hkp://pool.sks-keyservers.net --send-keys PUBLIC_KEY_ID

然后,使用如下的命令以ASCII形式導(dǎo)出公共和私有的key,請(qǐng)將yourmail@email.com替換成你前面用于創(chuàng)建key的email。
gpg -a --export yourmail@email.com > public_key_sender.ascgpg -a --export-secret-key yourmail@email.com > private_key_sender.asc

打開Bintray的Edit Profile頁面點(diǎn)擊GPG 注冊(cè)。分別在Public Key和 Private Key中填入上一步導(dǎo)出的public_key_sender.asc和 private_key_sender.asc文件中的內(nèi)容。


點(diǎn)擊Update保存這些key。
最后一步就是啟用自動(dòng)注冊(cè)。到Bintray的主頁點(diǎn)擊maven。

點(diǎn)擊編輯

勾選中GPG Sign uploaed files automatically以啟用自動(dòng)注冊(cè)。

點(diǎn)擊Update保存這些步驟。完成。現(xiàn)在只需點(diǎn)擊一下,每個(gè)上傳到我們Maven倉庫的東西都會(huì)自動(dòng)注冊(cè)并做好轉(zhuǎn)向Maven Central 。
請(qǐng)注意這是一次性的操作,以后創(chuàng)建的每一個(gè)library都要應(yīng)用此操作。
Bintray和Maven Central 已經(jīng)準(zhǔn)備好了?,F(xiàn)在轉(zhuǎn)到Android Studio部分。
第四部分:準(zhǔn)備一個(gè)Android Studio項(xiàng)目
很多情況下,我們需要同時(shí)上傳一個(gè)以上的library到倉庫,也可能不需要上傳東西。因此我建議最好將每部分分成一個(gè)Module。最好分成兩個(gè)module,一個(gè)Application Module一個(gè)Library Module。Application Module用于展示庫的用法,Library Module是library的源代碼。如果你的項(xiàng)目有一個(gè)以上的library,盡管創(chuàng)建另外的module:1個(gè) module對(duì)應(yīng)1 個(gè)library。



我相信大家知道如何創(chuàng)建一個(gè)新的module,因此就不會(huì)深入講解這個(gè)問題了。其實(shí)很簡(jiǎn)單,基本就是選擇creating an Android Library module ,然后就完了。



下一步是把bintray插件應(yīng)用在項(xiàng)目中。我們需要修改項(xiàng)目的build.gradle文件中的依賴部分,如下:
dependencies { classpath 'com.android.tools.build:gradle:1.2.3' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2' classpath 'com.github.dcendents:android-maven-plugin:1.2'}

有一點(diǎn)非常重要,那就是gradle build tools的版本設(shè)置成1.1.2以上,因?yàn)橐郧暗陌姹居袊?yán)重的bug,我們將使用的是最新的版本1.2.3。
接下來我們將修改local.properties。在里面定義api key的用戶名以及被創(chuàng)建key的密碼,用于bintray的認(rèn)證。之所以要把這些東西放在這個(gè)文件是因?yàn)檫@些信息時(shí)比較敏感的,不應(yīng)該到處分享,包括版本控制里面。幸運(yùn)的是在創(chuàng)建項(xiàng)目的時(shí)候local.properties文件就已經(jīng)被添加到.gitignore了。因此這些敏感數(shù)據(jù)不會(huì)被誤傳到git服務(wù)器。
下面是要添加的三行代碼:
bintray.user=YOUR_BINTRAY_USERNAMEbintray.apikey=YOUR_BINTRAY_API_KEYbintray.gpg.password=YOUR_GPG_PASSWORD

bintray username 放在第一行, API Key放在第二行, API Key可以在Edit Profile頁面的API Key 選項(xiàng)卡中找到。
最后一行是創(chuàng)建 GPG key的密碼。保存并關(guān)閉這個(gè)文件。
最后要修改的是module的build.gradle文件。注意前面修改的是項(xiàng)目的build.gradle文件。打開它,在apply plugin: 'com.android.library'之后添加這幾行,如下:

復(fù)制代碼

pply plugin: 'com.android.library' ext { bintrayRepo = 'maven' bintrayName = 'fb-like' publishedGroupId = 'com.inthecheesefactory.thecheeselibrary' libraryName = 'FBLike' artifact = 'fb-like' libraryDescription = 'A wrapper for Facebook Native Like Button (LikeView) on Android' siteUrl = 'https://github.com/nuuneoi/FBLikeAndroid' gitUrl = 'https://github.com/nuuneoi/FBLikeAndroid.git' libraryVersion = '0.9.3' developerId = 'nuuneoi' developerName = 'Sittiphol Phanvilai' developerEmail = 'sittiphol@gmail.com' licenseName = 'The Apache Software License, Version 2.0' licenseUrl = 'http://www.apache.org/licenses/LICENSE-2.0.txt' allLicenses = ["Apache-2.0"]}
復(fù)制代碼

bintrayRepo使用默認(rèn)的,即maven。bintrayName修改成你上面創(chuàng)建的 package name。其余的項(xiàng)也修改成和你library信息相匹配的值。有了上面的腳本,每個(gè)人都能通過下面的一行g(shù)radle腳本使用這個(gè)library。
compile 'com.inthecheesefactory.thecheeselibrary:fb-like:0.9.3‘

最后在文件的后面追加兩行如下的代碼來應(yīng)用兩個(gè)腳本,用于構(gòu)建library文件和上傳文件到bintray(為了方便,我直接使用了github上連接到相關(guān)文件的鏈接):
apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/installv1.gradle'apply from: 'https://raw.githubusercontent.com/nuuneoi/JCenter/master/bintrayv1.gradle'

完成!你的項(xiàng)目現(xiàn)在設(shè)置好了,準(zhǔn)備上傳到bintray吧!

第五部分:把library上傳到你的bintray空間
現(xiàn)在是上傳library到你自己的bintray倉庫上的時(shí)候了。請(qǐng)到Android Studio的終端(Terminal)選項(xiàng)卡。



第一步是檢查代碼的正確性,以及編譯library文件(aar,pom等等),輸入下面的命令:
gradlew install

如果沒有什么問題,會(huì)顯示:
BUILD SUCCESSFUL

現(xiàn)在我們已經(jīng)成功一半了。下一步是上傳編譯的文件到bintray,使用如下的命令:
gradlew bintrayUpload

如果顯示如下你就大喊一聲eureka吧!
SUCCESSFUL

在bintray的網(wǎng)頁上檢查一下你的package。你會(huì)發(fā)現(xiàn)在版本區(qū)域的變化。


點(diǎn)擊進(jìn)去,進(jìn)入Files選項(xiàng)卡,你會(huì)看見那里有我們所上傳的library文件。

恭喜,你的library終于放在了互聯(lián)網(wǎng)上,任何人都可以使用了!
不過也別高興過頭,library現(xiàn)在仍然只是在你自己的Maven倉庫,而不是在jcenter上。如果有人想使用你的library,他必須定義倉庫的url,如下:
復(fù)制代碼

repositories { maven { url 'https://dl.bintray.com/nuuneoi/maven/' }} ... dependencies { compile 'com.inthecheesefactory.thecheeselibrary:fb-like:0.9.3'}
復(fù)制代碼

譯者注:前面都沒怎么看懂,看到上面的代碼之后一下子全懂了,呵呵。
你可以在bintray的web界面找到自己Maven倉庫的url,或者直接吧nuuneoi替換成你的bintray用戶名(因?yàn)榍懊娌糠制鋵?shí)都是一樣的)。我還建議你直接訪問那個(gè)鏈接,看看里面到底是什么。
但是,就如我們前面所講的那樣,讓開發(fā)者去定義url這種復(fù)雜的事情并不是分享library的最佳方式。想象一下,使用10個(gè)library不得添加10個(gè)url?所以為了更好的體驗(yàn),我們把library從自己的倉庫傳到j(luò)center上。

第六部分:同步bintray用戶倉庫到j(luò)center
把library同步到j(luò)center非常容易。只需訪問網(wǎng)頁并點(diǎn)擊Add to JCenter


什么也不做直接點(diǎn)擊Send。



現(xiàn)在我們所能做的就是等待bintray團(tuán)隊(duì)審核我們的請(qǐng)求,大概2-3個(gè)小時(shí)。一旦同步的請(qǐng)求審核通過,你會(huì)收到一封確認(rèn)此更改的郵件?,F(xiàn)在我們?nèi)ゾW(wǎng)頁上確認(rèn),你會(huì)在 Linked To 部分看到一些變化。


從此之后,任何開發(fā)者都可以使用jcenter() repository 外加一行g(shù)radle腳本來使用我們的library了
1

compile
'com.inthecheesefactory.thecheeselibrary:fb-like:0.9.3'

想檢查一下自己的library在jcenter上是否存在?你可以直接訪問http://jcenter.bintray.com,然后進(jìn)入和你library的group id 以及artifact id匹配的目錄。在本例中就是com -> inthecheesefactory -> thecheeselibrary -> fb-like -> 0.9.3。


請(qǐng)注意鏈接到j(luò)center是一個(gè)只需做一次的操作。如果你對(duì)你的package做了任何修改,比如上傳了一個(gè)新版本的binary,刪除了舊版本的binary等等,這些改變也會(huì)影響到j(luò)center。不過畢竟你自己的倉庫和jcenter在不同的地方,所以需要等待2-3分鐘讓jcenter同步這些修改。
同時(shí)注意,如果你決定刪除整個(gè)package,放在jcenter倉庫上的library不會(huì)被刪除。它們會(huì)像僵尸一樣的存在,沒有人再能刪除它了。因此我建議,如果你想刪除整個(gè)package,請(qǐng)?jiān)谝瞥齪ackage之前先在網(wǎng)頁上刪除每一個(gè)版本。
第七部分:上傳library到Maven Central
并不是每個(gè)安卓開發(fā)者都使用jcenter。仍然有部分開發(fā)者還在使用mavenCentral() ,因此讓我們也把library上傳到Maven Central 吧。
要從jcenter到Maven Central,首先需要完成兩個(gè)任務(wù):

  1. Bintray package 已經(jīng)連接到j(luò)center。
  2. Maven Central上的倉庫已經(jīng)認(rèn)證通過
    如果你已經(jīng)通過了這些授權(quán),上傳library package到Maven Central就異常簡(jiǎn)單了,只需在package的詳情頁面點(diǎn)擊Maven Central 的鏈接。


輸入你的Sonatype用戶名和密碼并點(diǎn)擊Sync。

如果成功,在Last Sync Status中會(huì)顯示Successfully synced and closed repo(見圖),但是如果遇到任何問題,則會(huì)在Last Sync Errors顯示出來。你需要根據(jù)情況修復(fù)問題,能上傳到Maven Central 的library的條件是相當(dāng)嚴(yán)格的,比如+ 號(hào)是不能在ibrary版本的依賴定義中使用的。
完成之后,你可以在 Maven Central Repository 上找到你的library。在那些匹配你ibrary的group id以及artifact id的目錄中。比如本例中就是com -> inthecheesefactory -> thecheeselibrary -> fb-like -> 0.9.3。
恭喜!雖然需要許多步驟,但是每一步都很簡(jiǎn)單。而且大部分操作都是一勞永逸的。
轉(zhuǎn)自:http://www.cnblogs.com/sihaixuan/p/4852974.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容