1. 程式人生 > >[Publish AAR To Maven] 使用 Gradle 釋出 AAR 到 Maven 倉庫

[Publish AAR To Maven] 使用 Gradle 釋出 AAR 到 Maven 倉庫

========================================================

有一個好的庫想與世界的夥伴分享,於是共享到GitHub上,於是有人看到了,但是要使用卻發現配置非常難。但是發現別人的庫只需要一行程式碼卻能使用;於是我想知道為什麼能這麼簡單。
在這篇文章中將帶你瞭解如何釋出你的庫到遠端倉庫Maven中,又如何使用。

準備

開始之前我們有一定的準備工作,如果準備好了那麼後面將會非常順暢。

  • 學會GPGTools的使用,並生成你的金鑰對;見:使用GPG對檔案進行簽名加密
  • 添加發布Maven的Gradle檔案
  • 新增你的個人資訊,如你的釋出地址、庫版本資訊等
  • 開發釋出快照、以及正式版本,稽核

開始

前面的兩項工作由於篇幅較大,單獨開篇了,歡迎大家去看~~,我們從第三的地方開始。

編寫Lib

編寫庫,這裡我採用的是Android-Studio;至於其使用建立過程以及簡單使用大家可見:環境配置之正式版Android Studio 1.0

在這裡我使用 Genius-Android 開源庫進行演示。
這裡寫圖片描述
在本次專案中我們嘗試釋出 UI 部分,圖中圈起來部分為我們需要的檔案。

編寫釋出檔案

釋出檔案就是其中的 maven_push.gradle 。由於程式碼較長就不貼程式碼了,大家可以去GitHub上檢視。
這裡寫圖片描述
程式碼已經發布到

BeFoot 開源專案中.
該程式碼執行在 Gradle 中,作用是按照配置進行打包程式碼檔案,然後簽名檔案,最後釋出你的檔案到倉庫。

在該程式碼中可以看見許多的方法與引數,如:

def isReleaseBuild() {
    return VERSION_NAME.contains("SNAPSHOT") == false
}

這個方法的作用是判斷版本名稱是否含有 “SNAPSHOT”欄位,也就是判斷當前是否釋出的是快照版本,以便傳輸到不同的伺服器地址。
但是其中的 “VERSION_NAME” 哪裡來的呢?往下看~~

gradle.properties

“maven_push”

檔案中所有的欄位都是訪問的你的 “gradle.properties” 檔案。
這裡寫圖片描述
可以看見我們的專案中有兩個這樣的檔案,兩個檔案中的內容都可以全部寫到一個檔案中。之所以寫出兩個,下面那個代表的是本專案中的全域性變數,至於 UILib 中的那個則只侷限於 UILib 中使用。

現在我們分別開啟看看,首先開啟下面那個全域性的檔案。
這裡寫圖片描述

在這裡我們需要更改的地方有如下幾個地方:
這裡寫圖片描述

再來看看庫中的檔案:
這裡寫圖片描述

這裡相對簡單的多了,無非就是名稱,ID,型別,版本等資訊。
有必要說明的是,上面的POM_GROUP_ID+POM_ARTIFACT_ID+VERSION_NAME 將會得到如下的使用方式:

dependencies {
    compile 'com.github.qiujuer:genius-ui:3.0.0-SNAPSHOT'
}

完了?沒~還有一個至關重要的地方,在”Maven_Push”的程式碼中我們會找到:
這裡寫圖片描述
以及其中的 signing 部分,但是你會發現你找遍了上面的所有的檔案都沒有發現這些欄位,那麼這些欄位在哪裡呢?

很簡單,在Android-Studio 快取資料夾配置 中有講解“.gradle”目錄對吧?那麼現在我們去看看 這個目錄中有什麼。
這裡寫圖片描述
可以看見其中也有一個 “gradle.properties”檔案,這個檔案不在專案中,但是在專案中卻可以訪問,這是一個全域性的檔案,任何專案都可以訪問該檔案,如果你沒有,那麼可以自己建立一個就OK。

為什麼要儲存到這裡?我們都知道專案中的 “gradle.properties” 檔案一般來說都是會提交到 Git 上面去的,所以專案中的檔案不應該包含私密的東西,比如金鑰對,金鑰密碼,以及你的 Maven 的賬戶資訊。

開啟該檔案我們能看見:
這裡寫圖片描述

build.gradle

現在還需要修改你的專案中的 build 檔案,需要更改的地方如下:
這裡寫圖片描述

android {
    sourceSets {
        main {
            manifest.srcFile 'src/main/AndroidManifest.xml'
            java.srcDirs = ['src/main/java']
            res.srcDirs = ['src/main/res']
        }
    }
    lintOptions {
        abortOnError false
    }
}
apply from: 'https://raw.github.com/qiujuer/BeFoot/master/blog/gradle-mvn-push/gradle-mvn-push.gradle'

釋出

如果你上面的都做到了,那麼現在進入釋出的地段了~~

執行釋出命令

Android-Studio進入專案中,開啟“Terminal”視窗,進入你的專案中,執行命令:

$ gradle clean build uploadArchives

這裡寫圖片描述
第一次操作的時候將會下載一大堆的依賴。
這裡寫圖片描述
最後出現成功提示則OK。
這裡寫圖片描述

檢查快照版本

也不是說快照版本就無法使用,同樣可以,其使用方式為:

dependencies {
    repositories {
        maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
    }
    compile 'com.github.qiujuer:genius-ui:3.0.0-SNAPSHOT'
}

如果釋出了過個快照版本,那麼就為:

compile 'com.github.qiujuer:genius-ui:3.0.0-SNAPSHOT-2' 

釋出“Release”

該釋出方法操作命令列的方式與快照版本一樣,完全一樣;只需要更改你的庫中的:gradle.properties 檔案中的 VERSION_NAME ,刪除掉後面的 “”-SNAPSHOT”“ 就OK。
這裡寫圖片描述
之後執行命令列命令;然後你會發現你在:
https://oss.sonatype.org/content/groups/public/
中無法找到你釋出的 “Release”版本;這是正常的;如果現在找到了反而不正常。

操作倉庫釋出

要完成“Release”版本的釋出還需要登陸到後臺中進行一些簡單的操作。
網站:https://oss.sonatype.org/
登陸:使用者名稱與密碼與https://issues.sonatype.org/中的完全一樣。
登陸成功後點擊左邊導航中的:“Staging Repositories”
這裡寫圖片描述
在其中根據你的GroupId去找你對應的一行。比如我的Id:“com.github.qiujuer”那麼就是:
這裡寫圖片描述
找到後點擊他,如果不是你的或者你沒有找到那麼看看是不是你上面根本就沒有上傳成功。
這裡寫圖片描述
選中後點擊上面的“Close”按鈕,填寫描述資訊;然後等待一段時間;在這個過程中你可以點選重新整理按鈕。
這裡寫圖片描述
在下面可以看見傳送了郵件提醒,然後上面的 “Release” 按鈕可以點選了,此時點選該按鈕,填寫描述資訊,不必太多。然後等待;當下面同樣出現傳送了郵件提醒的時候那麼恭喜你釋出成功了。

如果在上面你上傳的檔案中沒有簽名檔案那麼將無法操作成功;此時你應該重新上傳有簽名的版本。

釋出成功後你的使用方式為(你並不能立即就能使用,一般需要10分鐘及其以上的時間):

dependencies {
    compile 'com.github.qiujuer:genius-ui:3.0.0'
}

附件

一些問題

該地方,暫時就不寫了,太長了~~
說一個簡單的吧:如果執行釋出命令時出現:401 錯誤,代表你的賬戶登入失敗,也就是你的賬戶名或者密碼錯誤。

其他問題,大家如果遇到了可以提出來我會一一回答的。

==============追加===============

倉庫唯一

釋出專案到Maven 倉庫 ,必須要使用sonatype.org麼?sonatype.org是一個載體?還有其他選擇?
答案是:有其他的選擇~
如果 Gradle 沒有內建你的倉庫地址你也可以指定,甚至可以使用自己部署的伺服器來發布。比如:
這裡寫圖片描述
這個就是釋出到 快照 倉庫,但是快照倉庫地址 Gradle 並不知道,所以需要指定。

一些題外話

說實話這篇文章,很早以前就想寫了;但是大概想了一下感覺篇幅會比較大,所以一直沒有寫。

這次也是有朋友在問這方面的情況,所以就花了幾天時間寫了,真的是花了幾天時間,不是空閒時間。也許你們看只需要10分鐘,或許10分鐘都要不到,可我卻花了你的100倍甚至更多的時候來寫的。

由於是使用的 MarkDown 編輯器(出現BUG意外死掉的情況少)寫的,所以沒有像以前一樣加上高亮等操作,不是不加,而是編輯器還不支援。

========================================================