帶你裝逼帶你飛(將Library發(fā)布到JCenter)

轉(zhuǎn)載請標(biāo)明出處

本文出自HCY的博客

概述

將自己寫的庫上傳到Jcenter或者M(jìn)aven提供給自己或者別人使用悬嗓,在構(gòu)建項(xiàng)目的時(shí)候只要寫上一行如下類似的引用代碼即可引用自己的庫。是不是很酷的一件事情,本文一步一步教你如何將自己的代碼發(fā)布到JCenter上罢荡,帶你裝逼帶你飛。

compile 'com.android.support:recyclerview-v7:23.3.0'

本人使用的軟件環(huán)境

軟件名稱 版本號
操作系統(tǒng) Windows 7
Android Studio 2.2
Gradle 2.14.1
com.android.tools.build:gradle 1.5.0
com.github.dcendents:android-maven-gradle-plugin 1.3.0
com.jfrog.bintray.gradle:gradle-bintray-plugin 1.6.0

上傳到代碼到Jcenter

1.到Bintray官網(wǎng)注冊賬號

注冊相關(guān)信息

Bintray官網(wǎng)注冊賬號煤伟,填寫相關(guān)信息瞭吃,填寫的Organization Id很重要,一定要記起來到時(shí)候上傳代碼的時(shí)候要用杜跷。另外郵箱也不要填寫比如qq.com舰绘、163.com的郵箱,會無法注冊的葱椭。最好是填寫GMail郵箱地址捂寿。注冊完成之后到你填寫的郵箱里面去激活Bintray賬號即可。

2.創(chuàng)建代碼倉庫

創(chuàng)建代碼倉庫

點(diǎn)擊上圖所示的“Add NewRepository”按鈕孵运,添加代碼倉庫秦陋,點(diǎn)擊后就會跳轉(zhuǎn)到下圖的界面。

完善代碼倉庫信息

在上圖的Name輸入框中輸入代碼倉庫的名稱治笨,名字可以隨便寫驳概,但是一定要記得,因?yàn)楹竺嫔蟼鞔a的時(shí)候還要用旷赖,Type選擇Maven即可顺又。點(diǎn)擊Create即可創(chuàng)建代碼倉庫,若創(chuàng)建成功則會跳轉(zhuǎn)到下面的頁面等孵。

代碼倉庫創(chuàng)建完成后的顯示界面

如上圖紅色框框所示代碼倉庫的路徑就是Organization Id/Repository Name稚照,本人創(chuàng)建的代碼倉庫即為(coolcode/maven),另外要記住的信息是上圖右上角的Bintray User(Bintray的用戶名),因?yàn)楹竺嫔蟼鞔a要用到果录。

3.獲取賬號對應(yīng)的API KEY

個(gè)人信息編輯界面

點(diǎn)擊個(gè)人頭像進(jìn)入到個(gè)人信息主界面上枕,點(diǎn)擊Edit按鈕即可進(jìn)入到上圖所示的界面。點(diǎn)擊“API KEY”弱恒,輸入Bintray本賬號的登陸密碼辨萍,即可查看到本賬號的API KEY。到此為止我們已經(jīng)獲取到了如下四條重要的信息返弹,請牢記:

  • Organization Id(組織ID)
  • Repository Name(倉庫名稱)
  • Bintray User(Bintray賬號的用戶名)
  • Bintray API Key(Bintray賬號的API KEY)

4.在Project的build.gradle添加如下信息

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.5.0'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3' //用于打包Maven所需文件
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6' //用于上傳Maven生成的文件到Bintray
    }

}

allprojects {
    repositories {
        jcenter()
    }
}

5.在Module的根目錄下創(chuàng)建bintrayUpload.gradle文件

apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

//加載屬性文件
Properties properties = new Properties()
File localPropertiesFile = project.file("bintray.properties");
if (localPropertiesFile.exists()) {
    properties.load(localPropertiesFile.newDataInputStream())
}
File projectPropertiesFile = project.file("project.properties");
if (projectPropertiesFile.exists()) {
    properties.load(projectPropertiesFile.newDataInputStream())
}

//讀取屬性
def projectRepositoryName = properties.getProperty("project.repositoryName")
def projectName = properties.getProperty("project.name")
def projectGroupId = properties.getProperty("project.groupId")
def projectArtifactId = properties.getProperty("project.artifactId")
def projectVersionName = android.defaultConfig.versionName
def projectPackaging = properties.getProperty("project.packaging")
def projectSiteUrl = properties.getProperty("project.siteUrl")
def projectGitUrl = properties.getProperty("project.gitUrl")

def developerId = properties.getProperty("developer.id")
def developerName = properties.getProperty("developer.name")
def developerEmail = properties.getProperty("developer.email")

def bintrayUser = properties.getProperty("bintray.user")
def bintrayApikey = properties.getProperty("bintray.apiKey")
def bintrayOrganizationId = properties.getProperty("bintray.organizationId");

def javadocName = properties.getProperty("javadoc.name")

/*
*這句代碼一定要加否則會出現(xiàn)如下錯誤
* Could not upload to 'https://api.bintray.com/content/coolcode/maven/LibUiBase/1.0.0/CommonLibrary/LibUiBase/1.0.0/LibUiBase-1.0.0.pom': HTTP/1.1 400 Bad Request [
message:Unable to upload files: Maven group, artifact or version defined in the pom file do not match the file path 'CommonLibrary/LibUiBase/1.0.0/LibUiBase-1.0.0.p
om']
* */
group = projectGroupId

// 配置生成POM.xml文件的參數(shù)
install {
    repositories.mavenInstaller {
        pom {
            project {
                name projectName
                groupId projectGroupId
                artifactId projectArtifactId
                version projectVersionName
                packaging projectPackaging
                url projectSiteUrl
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer {
                        id developerId
                        name developerName
                        email developerEmail
                    }
                }
                scm {
                    connection projectGitUrl
                    developerConnection projectGitUrl
                    url projectSiteUrl
                }
            }
        }
    }
}

//生成sources.jar
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

//生成javadoc.jar
task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

//javadoc的配置
javadoc {
    options {
        encoding "UTF-8"
        charSet 'UTF-8'
        author true
        version projectVersionName
        links "http://docs.oracle.com/javase/7/docs/api"
        title javadocName
    }
}

/*
*userOrg為bintray賬號信息里面的Organization Id
*repo為你創(chuàng)建的倉庫名稱
* 如果上述兩個(gè)字段寫錯了锈玉,則會出現(xiàn)下面類似的錯誤
*Could not create package 'huangxuanheng/maven/fragmentstack': HTTP/1.1 404 Not Found [message:Repo 'maven' was not found]
*
*
* */
bintray {
    user = bintrayUser
    key = bintrayApikey
    configurations = ['archives']
    pkg {
        userOrg = bintrayOrganizationId
        repo = projectRepositoryName
        name = projectName
        websiteUrl = projectSiteUrl
        vcsUrl = projectGitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}

6.在Module的build.gradle中應(yīng)用上面創(chuàng)建的bintrayUpload.gradle文件,添加如下代碼

apply from: "bintrayUpload.gradle"

7.在Module的根目錄下創(chuàng)建第5步要讀取的配置文件

創(chuàng)建bintray.properties用于配置bintray和開發(fā)者信息

#配置bintray賬號相關(guān)信息
#bintray用戶名,不是登陸郵箱,是個(gè)人中心右上角顯示的名字
bintray.user=huangcaiyuan5678
#bintray的ApiKey
bintray.apiKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#bintray的Organization Id
bintray.organizationId=coolcode


#配置開發(fā)者信息
#昵稱
developer.id=huangcaiyuan
#姓名
developer.name=huangcaiyuan
#郵箱
developer.email=huangcaiyuan1234@gmail.com

創(chuàng)建project.properties用于配置項(xiàng)目信息

#project
#倉庫名稱义起,就是在bintray官網(wǎng)建立的倉庫的名稱
project.repositoryName=maven
#項(xiàng)目名稱
project.name=LibUiBase
#項(xiàng)目組id
project.groupId=com.hcy.library
#項(xiàng)目id,一般同project.name
project.artifactId=LibUiBase
#打包類型
project.packaging=aar
#項(xiàng)目官方網(wǎng)站地址
project.siteUrl=https://github.com/Money888
#項(xiàng)目git地址
project.gitUrl=https://github.com/Money888
#生成的javadoc名稱
javadoc.name=LibUiBase

8.在Terminal窗口下收入如下指令上傳到Bintray

gradlew install
gradlew bintrayUpload

若出現(xiàn)BUILD SUCCESSFUL則說明成功上傳到了Bintray嘲玫。

9.添加Package到JCenter

進(jìn)入到Bintray網(wǎng)站,找到剛才上傳的項(xiàng)目并扇,點(diǎn)擊右下角的“Add To JCenter”按鈕去团。

點(diǎn)擊右下角的“Add To JCenter”按鈕

然后填寫項(xiàng)目描述點(diǎn)擊“Send”提交審核即可,如果審核成功穷蛹,它會給你發(fā)送一封站內(nèi)信通知你土陪。

10.引用成功

//引用方式如下
compile '項(xiàng)目組ID:項(xiàng)目名稱:項(xiàng)目版本號'

//引用示例
compile 'com.android.support:recyclerview-v7:23.3.0'

常見問題及解決方案

Could not upload to 'https://api.bintray.com/content/coolcode/maven/LibUiBase/1.0.0/CommonLibrary/LibUiBase/1.0.0/LibUiBase-1.0.0.pom': HTTP/1.1 400 Bad Request [
message:Unable to upload files: Maven group, artifact or version defined in the pom file do not match the file path 'CommonLibrary/LibUiBase/1.0.0/LibUiBase-1.0.0.p
om']

解決方案:

出現(xiàn)這個(gè)問題的原因有可能是project.properties里面的project.name的屬性值與project.artifactId不一致,或者是bintrayUpload.gradle里面的group = projectGroupId腳本沒有寫肴熏,嘗試修改上面兩種可能出現(xiàn)該問題的腳本鬼雀。

Could not create package 'coolcode/maven/LibUIBase': HTTP/1.1 404 Not Found [message:Repo 'maven' was not found]

解決方案:

出現(xiàn)這個(gè)問題的原因可能是名為maven的倉庫(不一定是叫maven,名字只要和bintray網(wǎng)站建立倉庫時(shí)的名稱一致即可)沒有建立蛙吏,或者建立了倉庫源哩,但是名稱不叫maven,又或者組織名稱不叫coolcode鸦做,因?yàn)轫?xiàng)目上傳的路徑為:組織ID/倉庫名稱/項(xiàng)目名励烦,所以檢查組織ID和倉庫名稱是否正確即可解決問題。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末泼诱,一起剝皮案震驚了整個(gè)濱河市坛掠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌治筒,老刑警劉巖屉栓,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異耸袜,居然都是意外死亡友多,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門堤框,熙熙樓的掌柜王于貴愁眉苦臉地迎上來域滥,“玉大人纵柿,你說我怎么就攤上這事∑疲” “怎么了藐窄?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵资昧,是天一觀的道長酬土。 經(jīng)常有香客問我,道長格带,這世上最難降的妖魔是什么撤缴? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮叽唱,結(jié)果婚禮上屈呕,老公的妹妹穿的比我還像新娘。我一直安慰自己棺亭,他們只是感情好虎眨,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著镶摘,像睡著了一般嗽桩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凄敢,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天碌冶,我揣著相機(jī)與錄音,去河邊找鬼涝缝。 笑死扑庞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拒逮。 我是一名探鬼主播罐氨,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼滩援!你這毒婦竟也來了岂昭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤狠怨,失蹤者是張志新(化名)和其女友劉穎约啊,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體佣赖,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恰矩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了憎蛤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片外傅。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纪吮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出萎胰,到底是詐尸還是另有隱情碾盟,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布技竟,位于F島的核電站冰肴,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏榔组。R本人自食惡果不足惜熙尉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搓扯。 院中可真熱鬧检痰,春花似錦、人聲如沸锨推。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽换可。三九已至椎椰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锦担,已是汗流浹背俭识。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留洞渔,地道東北人套媚。 一個(gè)月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像磁椒,于是被迫代替她去往敵國和親堤瘤。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

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