使用gradle發(fā)布aar到maven倉庫
一凄硼、背景
我們有一個(gè)這樣的需求 :封裝一個(gè)庫 包含一個(gè)或幾個(gè)相關(guān)功能 提供給他人使用,別人引用我們的 jar包(或aar包)時(shí),能夠方便快速添加引用
再或者 某人人品爆發(fā) 封裝了一些比較實(shí)用的庫 比如 拍照和選擇相冊(cè)圖片 驯击,6.0權(quán)限使用的封裝 等等 想分享給別人使用 如果上傳到GitHub 別人引用需要下載 添加moldule依賴,或者直接在app里面使用 還要把依賴的遠(yuǎn)程庫重新依賴一遍 没讲,配置相當(dāng)麻煩蹲坷,此時(shí)我們也需要提供一個(gè)比較方法的依賴方式坷剧。
比較好的方式就是 上傳到遠(yuǎn)程倉庫,
上傳方式
1 gradle (maven)
2 maven (maven)
3 bintray (jcenter)
今天說是是用 Android Studio gradle 配置的方式(相對(duì)容易)
二辖试、準(zhǔn)備工作
1 注冊(cè)賬號(hào)
從https://issues.sonatype.org 注冊(cè)一個(gè)帳號(hào)(已經(jīng)有的請(qǐng)忽略)辜王,賬號(hào)和密碼都要記住,下面登錄賬號(hào)密碼還要用這個(gè)剃执,后續(xù)配置 gradle也要用到誓禁。
2 創(chuàng)建工單
點(diǎn)擊 創(chuàng)建按鈕
注意:
項(xiàng)目:選擇[Community Support - Open Source Project Repository Hosting ]
問題類型:選擇 [New Project]
Group Id: 唯一標(biāo)識(shí),我用的是com.github.xxxxx
官方文檔:http://central.sonatype.org/pages/choosing-your-coordinates.html
參考 注冊(cè) Maven 倉庫 sonatype.org 賬戶 中的group Id 和注意事項(xiàng)
Project URL:項(xiàng)目源碼的地址肾档,如果不想公布源碼摹恰,可以只填寫一個(gè)只含README 的項(xiàng)目的地址。
SCM url:管理項(xiàng)目地址 怒见,可以跟Project URL 同一個(gè)俗慈。
點(diǎn)擊創(chuàng)建 等待回復(fù)
3 等待回復(fù)
第一次審核要一天左右,再次創(chuàng)建的工單審核要一小時(shí)左右遣耍。
如無問題 解決結(jié)果變成 已修復(fù) (此時(shí)也會(huì)發(fā)郵件給你)此時(shí)表示有權(quán)限可以上傳東西了
里面的鏈接地址都能用的到的
三 闺阱、gradle配置
1 創(chuàng)建android studio 工程,添加一個(gè)module舵变,封裝我們需要的功能
2 配置gradle
1 在當(dāng)前module下新建gradle.properties(如果沒有的話)酣溃,添加如下代碼:maven 上傳參數(shù)
2 在當(dāng)前module下新建maven_upload.gradle文件瘦穆,內(nèi)容如下:
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)
}
}
}
}
// 進(jìn)行簽名
signing { // 當(dāng) 發(fā)布版本 & 存在"uploadArchives"任務(wù)時(shí),才執(zhí)行
// required {
// isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives")
// }
sign configurations.archives
}
里面的密碼等敏感信息 放到此處不太合適 赊豌,只是做測試使用扛或,有人說可以放到忽略文件里面 ,這樣就不會(huì)上傳這些敏感信息碘饼。好吧 實(shí)在是有點(diǎn)啰嗦 熙兔,言歸正傳 我們繼續(xù)。
3 在moduley工程的build.gradle里面艾恼,添加如下代碼:
apply from: 'maven_upload.gradle'
也可以是遠(yuǎn)程文件,
apply from: 'https://raw.githubusercontent.com/{$username}/.../master/.../maven_upload.gradle'
3 上傳jar
注意:上傳到maven的release服務(wù)器按理來說需要用到簽名機(jī)制住涉,android studio自帶的簽名是gpg機(jī)制,gradle 之前需要將公鑰上傳到maven服務(wù)器
參考這個(gè) gpg常用命令
執(zhí)行命令
1 打開 Terminal
gradlew uploadArchives
2 也可以選擇gradle ->module ->upload->uploadArchives
查看上傳結(jié)果
我的
SNAPSHOT 版
https://oss.sonatype.org/content/groups/public/com/github/zuochunsheng
release 版 顯示的也是 SNAPSHOT
https://oss.sonatype.org/content/groups/staging/com/github/zuochunsheng/
注意:
可以看出其中有著原始文件以及簽名等驗(yàn)證文件, 如果你的沒有“asc”文件钠绍,那么在https://oss.sonatype.org/#stagingRepositories 發(fā)布“Release”版本時(shí)將無法通過審核舆声。
5 release版
我們?cè)?gradle中這樣設(shè)置的
// 判斷版本是Release or Snapshots
def isReleaseBuild() {
return !MAVEN_VERSION.contains("SNAPSHOT");
}
所以只要將 gradle.properties 文件中的 VERSION_NAME ,刪除后面的 “”-SNAPSHOT”“ 就是release版本 五慈,命令跟 snapshot 是一樣的纳寂。
需要注意的是 快照版與 Release版區(qū)別。
1 快照版本是用來發(fā)布你的測試的地方泻拦,你可以多次發(fā)布同一個(gè)版本到該目錄毙芜。對(duì)于同一個(gè)版本如 1.0.0 ,你的快照發(fā)布了10個(gè)争拐,那么你將會(huì)看見十個(gè)快照版本文件
2 發(fā)布版本一個(gè)版本只能發(fā)布一次文件腋粥,除非你本次發(fā)布失敗了需要重新提交。
額 架曹,跑題了
我們是要發(fā)布release版
1 登錄https://oss.sonatype.org/#stagingRepositories 用戶名和密碼與https://issues.sonatype.org/ 中的完全一樣,可以在搜索中 輸入我們的groud Id, 快速找到我們上傳的jar
2 選中后 點(diǎn)上方的Close隘冲,稍等片刻 它先檢查一下你上傳的東西是否符合規(guī)范,沒有問題 檢查完畢后該條狀態(tài)被標(biāo)記為closed 绑雄,上方的release 變?yōu)榭牲c(diǎn)擊狀態(tài)展辞。
3 選中后 點(diǎn)上面的Release,等2個(gè)小時(shí)左右即可在http://search.maven.org/搜索到你發(fā)布的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'
需要注意的是:
原本地依賴的庫在遠(yuǎn)程無法添加依賴的 如 module ->libs 中的庫 (在build.gradle 的dependencies 中 形如 implementation files('libs/xxx') 的文件)
在使用時(shí)任然要依賴一次
參考
[Publish AAR To Maven] 注冊(cè) Maven 倉庫 sonatype.org 賬戶
幾個(gè)Maven相關(guān)地址:
① https://issues.sonatype.org 工單管理地址罗珍,就是創(chuàng)建工單,申請(qǐng)上傳資格的地方脚粟。
② https://oss.sonatype.org/#welcome 構(gòu)件倉庫覆旱,jar包會(huì)上傳到這里,Release 之后就會(huì)同步到maven中央倉庫核无。
③ http://search.maven.org/ 最終表現(xiàn)形式為 可以在這里搜索到扣唱。