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 建立工單
點選 建立按鈕
注意:
項目:選擇[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 等待回複
第一次稽核要一天左右,再次建立的工單稽核要一小時左右。
如無問題 解決結果變成 已修複 (此時也會發郵件給你)此時表示有權限可以上傳東西了
裡面的連結位址都能用的到的
三 、gradle配置
1 建立android studio 工程,添加一個module,封裝我們需要的功能
2 配置gradle
1 在目前module下建立gradle.properties(如果沒有的話),添加如下代碼: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
檢視上傳結果
我的
SNAPSHOT 版
https://oss.sonatype.org/content/groups/public/com/github/zuochunsheng
release 版 顯示的也是 SNAPSHOT
https://oss.sonatype.org/content/groups/staging/com/github/zuochunsheng/
注意:
可以看出其中有着原始檔案以及簽名等驗證檔案, 如果你的沒有“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/ 最終表現形式為 可以在這裡搜尋到。