1. MavenCentral和JCenter
? ? Maven Central 是由sonatype.org維護的Maven服務器。jcenter是由 bintray.com維護的Maven服務器。雖然Maven Central和jcenter都是標準的maven倉庫服務器,但是它們維護在完全不同的服務器,由不同的人提供內容,兩者之間毫無關系。在jcenter上存在的開源庫,可能 在Maven Central 上并不存在,反之亦然。我們都知道MavenCentral對開發者不夠友好,它的發布庫工作略顯繁雜且緩慢。所以我們一般都比較喜歡先將開源庫發布到jcenter后再同步到MavenCentral,這樣可以做到一舉兩得,開源庫在兩個maven倉庫服務器上都有發布。當然,有一件事情你必須要知曉明白:無論你是將開源庫發布到Maven Central還是jcenter,你都要注冊一個相應的用戶。
2. Maven Central用戶注冊
如果你只想把開源庫發布到jcenter服務器,那么請直接忽略掉整個Maven Central用戶注冊過程。直接跳到提綱3后繼續閱讀本文。
(1)在https://issues.sonatype.org中注冊并激活用戶。
(2)登錄用戶,點擊“Create”創建一個issue
? -Summary:填寫名稱,可以是任意內容
? -Description:填寫描述
? -Group Id:域名反轉(有效域名),如果沒有域名,就直接使用自己的github反轉(如github.com/thepacific反轉后是com.github.thepacific,其中thepacific是你的github用戶名,為了規范化,建議全小寫)
? ?-Project URL:項目的url,可以是項目的github地址
? ? -其他的條目可以不填,然后提交審核即可(審核通過前,你的倉庫是無法使用的)
? (3)issue審核期一般在2天內,如果審核通過后會發郵件通知你,登錄后查看“issue->上面創建的名稱”,你會發現它的等待狀態為“resolved”,至此恭喜你,你的倉庫可以正常使用了。
注意:一個用戶只需要創建一個issue就可以了,多創建了,人家也不會給你審核通過,容易招管理員厭惡。(你可以把issue想象成你的專屬maven倉庫,把你所有的開源庫都提交到這里就對了)
3. jcentral用戶注冊
(1)在https://bintray.com/中注冊并激活用戶
(2)登錄用戶,找到“Your Profile-->Edit”編輯你的資料
(3)“Your Profile-->Edit-->Accounts”,在Sonatype OSS User處填寫你的Maven Central用戶名(這一步不是必須的,如過你沒有Maven Central賬戶或者不想將開源庫同步到Maven Central服務器,可以忽略該步驟)
(4)“Your Profile->Edit-->API Key” 記錄下這個key值,它會在發布開源庫的時候要用到
(5)“Your Profile” 找到maven倉庫,這個就是你可以發布開源庫的maven倉庫,它限定了名字是:maven
4. 提交工作過程
無論是jcenter還是Maven Central都要求你在發布開源庫的時候提供aar 、source.jar、javadoc.jar、pom等必須文檔。此外,Maven Central還要求你提供相應的GPG簽名。所以我們開原庫發布的整個過程大致是這樣:上傳PGP簽名 --> 打包aar 、source.jar、javadoc.jar、pom等必要文檔 -->上傳到jcenter -->? 提交加入jcenter審核 --> 在審核上一步的審核通過后,再同步到Maven Central(如果你只需要將開原庫發布到jcenter那么你可以忽略上傳PGP簽名和同步到Maven Central步驟),如下圖:
5. 具體實施步驟
(1)創建 GPG 簽名
如果你用的是windows或者OSX,那么請到GPG 生成工具下在相應的工具安裝(linux系統一般自帶了,無需下載安裝,如果你的linux系統不存在gpg工具,那么就在控制臺終端像往常安裝軟件一樣安裝它就行了)。安裝完GPG生成工具后,創建和上傳簽名具體步驟是在命令行運行依次如下命令:
$ gpg --gen-key
$ gpg --list-keys
$ gpg --keyserver hkp://pool.sks-keyservers.net --send-keys your-public-key-id
$ gpg -a --export your-email@your-mailbox.com> public_key_sender.asc
$ gpg -a --export-secret-key your-email@your-mailbox.com> private_key_sender.asc
解釋如下圖:
(2)配置GPG 簽名。在計算機本地 gradle 運行環境的屬性文件(位于~/.gradle/gradle.properties,如果沒有請自行手動創建)添加內容:
signing.keyId=your-public-key-id
signing.password=your-gpg-password
signing.secretKeyRingFile=/Users/your-user-name/.gnupg/secring.gpg
(3)在你的gradle.properties 文件中配置你自己的pom文件信息。(只要將模板中內容一一替換成你自己的即可。模板中有中文注釋提示。具體模板點擊連接:https://github.com/ThePacific/maven-push )
(4)在你的local.properties 文件中配置你自己的jcenter用戶名和之前提到的API Key,Maven Central的用戶名和密碼,以及PGP密碼信息。(注意這個文件事關賬戶密碼,不要輕易git push到服務器上。只要將模板中內容一一替換成你自己的即可。模板中有中文注釋提示。具體模板點擊連接:https://github.com/ThePacific/maven-push )
(5)在android studio中創建artifacts.gradle 腳本文件,把它放在gralde文件夾下。它主要作用是腳本化生成source.jar和javadoc.jar文件。 (無需修改模板,直接拿來用即可。模板中有中文注釋提示。具體模板點擊連接:https://github.com/ThePacific/maven-push )
(6)在android studio中創bintray_push.gradle 腳本文件,同樣把它放在gralde文件夾下。它主要作用是腳本化完成打包、上傳、同步工作等等工作。(將模板中的“developers”以及bintray—pkg下的”name"和“labels”修改為你自己的信息即可。模板中有中文注釋提示。將具體模板點擊連接:https://github.com/ThePacific/maven-push )
(7)在你工程下的全局gradle.build文件的dependencies下加入以下插件引用:
classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2'
classpath ‘org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1‘
(8)在你工程library module下的gradle.build文件加入:apply from: "../gradle/bintray_push.gradle"
(9)編譯工程,然后在android studio終端執行:gradlew bintrayUpload任務(也可以在gradle面板執行點擊執行bintrayUpload任務)。等待.......一兩分鐘,正常情況下,開原庫在第一次提交的時候,你會發現有一個同步到Maven Central失敗(Sync Maven Central failed)提示。哈哈哈,不用慌張。為什么呢(不知道原因的肯定是沒有仔細閱讀“提交工作過程”內容)?因為你的開原庫在jcenter上沒有都被審核通過,所以沒法被同步到Maven Central。
(10)登陸jcenter,導航到你的開源庫展示頁面,點擊“Maven Central”,選在“Click here to get it inclued”來提交開源庫發布申請
然后它會跳轉到package管理頁面,點擊“Include My Package”,輸入開源庫名字,選擇你的開源庫,最后填寫,提交信息即可。
(11)等待.......幾個小時。就會收到審核通過通知(在jcenter主頁的消息頁面查看通知,郵件也會收到通知)。如果看到“approved”字眼,恭喜你,你的開源庫已經在jcenter發布完成,可以被廣大開發人員通過gralde complie使用了。
(12)登陸jcenter,導航到你的開源庫展示頁面,輸入Maven Central用戶名和密碼之后,點擊“Sync”,數分鐘后你就看到同步成功提示。同樣恭喜你,你的庫已經在Maven Central得到發布,可以被廣大開發人員通過gralde complie使用了。
(13)步驟10、11、12一般是在開源庫第一次發布的時候是必須的,之后升級更新,都不需要手動操作了,因為我們之前的腳本文件,已經幫我們干了這些事。
6. 常見錯誤
(1)java代碼字符不是utf-8格式,導致javadoc生成失敗,腳本無法完成上傳,因為必要文件缺一不可。
(2)java代碼注釋有問題,導致javadoc生成失敗,腳本無法完成上傳,因為必要文件缺一不可。
(3)gpg簽名生成或者配置不正確,導致簽名失敗,無法被同步Maven Central。
(4)jcenter或者Maven Central用戶名不是全小寫導致遠程倉庫url不匹配,出現404
轉載請注明出處:http://www.lxweimin.com/p/080a74726c09
maven-push腳本模板項目主頁:https://github.com/ThePacific/maven-push