Maven上傳

使用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)建按鈕


image.png

注意:
項(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)限可以上傳東西了


image.png

里面的鏈接地址都能用的到的

三 闺阱、gradle配置

1 創(chuàng)建android studio 工程,添加一個(gè)module舵变,封裝我們需要的功能

2 配置gradle

1 在當(dāng)前module下新建gradle.properties(如果沒有的話)酣溃,添加如下代碼:maven 上傳參數(shù)


image.png

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


image.png
查看上傳結(jié)果

我的
SNAPSHOT 版
https://oss.sonatype.org/content/groups/public/com/github/zuochunsheng

release 版 顯示的也是 SNAPSHOT
https://oss.sonatype.org/content/groups/staging/com/github/zuochunsheng/
注意:

image.png

可以看出其中有著原始文件以及簽名等驗(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)形式為 可以在這里搜索到扣唱。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子噪沙,更是在濱河造成了極大的恐慌炼彪,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件曲聂,死亡現(xiàn)場離奇詭異霹购,居然都是意外死亡佑惠,警方通過查閱死者的電腦和手機(jī)朋腋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來膜楷,“玉大人旭咽,你說我怎么就攤上這事《奶” “怎么了穷绵?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長特愿。 經(jīng)常有香客問我仲墨,道長,這世上最難降的妖魔是什么揍障? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任目养,我火速辦了婚禮,結(jié)果婚禮上毒嫡,老公的妹妹穿的比我還像新娘癌蚁。我一直安慰自己,他們只是感情好兜畸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布努释。 她就那樣靜靜地躺著,像睡著了一般咬摇。 火紅的嫁衣襯著肌膚如雪伐蒂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天肛鹏,我揣著相機(jī)與錄音逸邦,去河邊找鬼。 笑死龄坪,一個(gè)胖子當(dāng)著我的面吹牛昭雌,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播健田,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼烛卧,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起总放,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤呈宇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后局雄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甥啄,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年炬搭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜈漓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宫盔,死狀恐怖融虽,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情灼芭,我是刑警寧澤有额,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站彼绷,受9級(jí)特大地震影響巍佑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜寄悯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一萤衰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧热某,春花似錦腻菇、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至秘遏,卻和暖如春丘薛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背邦危。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國打工洋侨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人倦蚪。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓希坚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親陵且。 傳聞我的和親對(duì)象是個(gè)殘疾皇子裁僧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容