天天看點

Maven上傳(一)-maven

Maven上傳(三)-JitPack

Maven上傳(二)-bintray

Maven上傳(一)-maven

使用gradle釋出aar到maven倉庫

一、背景

我們有一個這樣的需求 :封裝一個庫 包含一個或幾個相關功能 提供給他人使用,别人引用我們的 jar包(或aar包)時,能夠友善快速添加引用

再或者 某人人品爆發 封裝了一些比較實用的庫 比如 拍照和選擇相冊圖檔 ,6.0權限使用的封裝 等等 想分享給别人使用 如果上傳到GitHub 别人引用需要下載下傳 添加moldule依賴,或者直接在app裡面使用 還要把依賴的遠端庫重新依賴一遍 ,配置相當麻煩,此時我們也需要提供一個比較方法的依賴方式。

比較好的方式就是 上傳到遠端倉庫,

####上傳方式

1 gradle (maven)

2 maven (maven)

3 bintray (jcenter)

今天說是是用 Android Studio gradle 配置的方式(相對容易)

二、準備工作

1 新增賬號

從https://issues.sonatype.org 注冊一個帳号(已經有的請忽略),賬号和密碼都要記住,下面登入賬号密碼還要用這個,後續配置 gradle也要用到。

2 建立工單

點選 建立按鈕

Maven上傳(一)-maven

注意:

項目:選擇[Community Support - Open Source Project Repository Hosting ]

問題類型:選擇 [New Project]

Group Id: 唯一辨別,我用的是com.github.xxxxx

官方文檔:http://central.sonatype.org/pages/choosing-your-coordinates.html

參考 注冊 Maven 倉庫 sonatype.org 賬戶 中的group Id 和注意事項

Project URL:項目源碼的位址,如果不想公布源碼,可以隻填寫一個隻含README 的項目的位址。

SCM url:管理項目位址 ,可以跟Project URL 同一個。

點選建立 等待回複

3 等待回複

第一次稽核要一天左右,再次建立的工單稽核要一小時左右。

如無問題 解決結果變成 已修複 (此時也會發郵件給你)此時表示有權限可以上傳東西了

Maven上傳(一)-maven

裡面的連結位址都能用的到的

三 、gradle配置

1 建立android studio 工程,添加一個module,封裝我們需要的功能

2 配置gradle

1 在目前module下建立gradle.properties(如果沒有的話),添加如下代碼:maven 上傳參數

Maven上傳(一)-maven

2 在目前module下建立maven_upload.gradle檔案,内容如下:

apply plugin: 'maven'
apply plugin: 'signing'
configurations { deployerJars }
repositories {
    maven{ url"https://maven.google.com"}
    jcenter()
    mavenCentral()
    maven { url "https://jitpack.io" }
    google()
}

// 判斷版本是Release or Snapshots
def isReleaseBuild() {
    return !MAVEN_VERSION.contains("SNAPSHOT");
}
// 擷取倉庫url
def getRepositoryUrl() {
    return isReleaseBuild() ? MAVEN_RELEASE_URL : MAVEN_SNAPSHOT_URL;
}

uploadArchives {
    repositories {
        mavenDeployer {
            beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) }
            pom.project {
                version MAVEN_VERSION
                groupId MAVEN_GROUP_ID
                artifactId MAVEN_ARTIFACT_ID
                packaging MAVEN_PACKAGING
                description MAVEN_DESCRIPTION
                name MAVEN_NAME
                url MAVEN_URL
                inceptionYear MAVEN_INCEPTION_YEAR

                scm {
                    tag POM_TAG
                    url POM_SCM_URL
                    connection POM_SCM_CONNECTION
                    developerConnection POM_SCM_DEV_CONNECTION
                }
                licenses {
                    license {
                        name POM_LICENCE_NAME
                        url POM_LICENCE_URL
                        distribution POM_LICENCE_DIST
                        // comments POM_LICENCE_COMMENTS
                    }
                }

                developers {
                    developer {
                        //id POM_DEVELOPER_ID
                        name POM_DEVELOPER_NAME
                        email POM_DEVELOPER_EMAIL
                        //organization "paylibrary"
                        url POM_DEVELOPER_URL
                    }
                }
            }

            repository(url: getRepositoryUrl()) {
                authentication(userName: MAVEN_USERNAME, password: MAVEN_PASSWORD)
            }
        }
    }
}
// 進行簽名
signing { // 當 釋出版本 & 存在"uploadArchives"任務時,才執行
//    required {
//        isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives")
//    }
    sign configurations.archives
}

           

裡面的密碼等敏感資訊 放到此處不太合适 ,隻是做測試使用,有人說可以放到忽略檔案裡面 ,這樣就不會上傳這些敏感資訊。好吧 實在是有點啰嗦 ,言歸正傳 我們繼續。

3 在moduley工程的build.gradle裡面,添加如下代碼:

apply from: 'maven_upload.gradle'
           

也可以是遠端檔案,

apply from: 'https://raw.githubusercontent.com/{$username}/.../master/.../maven_upload.gradle'
           
3 上傳jar

注意:上傳到maven的release伺服器按理來說需要用到簽名機制,android studio自帶的簽名是gpg機制,gradle 之前需要将公鑰上傳到maven伺服器

參考這個 gpg常用指令

執行指令

1 打開 Terminal

gradlew uploadArchives
           

2 也可以選擇gradle ->module ->upload->uploadArchives

Maven上傳(一)-maven
檢視上傳結果

我的

SNAPSHOT 版

https://oss.sonatype.org/content/groups/public/com/github/zuochunsheng

release 版 顯示的也是 SNAPSHOT

https://oss.sonatype.org/content/groups/staging/com/github/zuochunsheng/

注意:

Maven上傳(一)-maven

可以看出其中有着原始檔案以及簽名等驗證檔案, 如果你的沒有“asc”檔案,那麼在https://oss.sonatype.org/#stagingRepositories 釋出“Release”版本時将無法通過稽核。

5 release版

我們在 gradle中這樣設定的

// 判斷版本是Release or Snapshots

def isReleaseBuild() {

return !MAVEN_VERSION.contains(“SNAPSHOT”);

}

是以隻要将 gradle.properties 檔案中的 VERSION_NAME ,删除後面的 “”-SNAPSHOT”“ 就是release版本 ,指令跟 snapshot 是一樣的。

需要注意的是 快照版與 Release版差別。

1 快照版本是用來釋出你的測試的地方,你可以多次釋出同一個版本到該目錄。對于同一個版本如 1.0.0 ,你的快照釋出了10個,那麼你将會看見十個快照版本檔案

2 釋出版本一個版本隻能釋出一次檔案,除非你本次釋出失敗了需要重新送出。

額 ,跑題了

我們是要釋出release版

1 登入https://oss.sonatype.org/#stagingRepositories 使用者名和密碼與https://issues.sonatype.org/ 中的完全一樣,可以在搜尋中 輸入我們的groud Id, 快速找到我們上傳的jar

2 選中後 點上方的Close,稍等片刻 它先檢查一下你上傳的東西是否符合規範,沒有問題 檢查完畢後該條狀态被标記為closed ,上方的release 變為可點選狀态。

3 選中後 點上面的Release,等2個小時左右即可在http://search.maven.org/搜尋到你釋出的jar包。

6 android studio 引用jar

例如

//使用快照版本
    repositories { maven { url "https://oss.sonatype.org/content/repositories/snapshots/" } }
    implementation 'com.github.zuochunsheng:paylibrary:1.0-SNAPSHOT'
           
//使用正式版
    implementation 'com.github.zuochunsheng:paylibrary:1.0'
           

需要注意的是:

原本地依賴的庫在遠端無法添加依賴的 如 module ->libs 中的庫 (在build.gradle 的dependencies 中 形如 implementation files(‘libs/xxx’) 的檔案)

在使用時任然要依賴一次

####參考

[Publish AAR To Maven] 注冊 Maven 倉庫 sonatype.org 賬戶

幾個Maven相關位址:

① https://issues.sonatype.org 工單管理位址,就是建立工單,申請上傳資格的地方。

② https://oss.sonatype.org/#welcome 構件倉庫,jar包會上傳到這裡,Release 之後就會同步到maven中央倉庫。

③ http://search.maven.org/ 最終表現形式為 可以在這裡搜尋到。