論一個(gè)小白如何將自己的開源庫發(fā)布到Bintray的JCenter上

在前一陣子的某一天淘太,我不小心撞上了JitPack的版本升級而導(dǎo)致的JitPack炸了考榨,于是無法把自己的庫發(fā)布成有效的開源庫已日,無奈之下描姚,我終于下定決心轉(zhuǎn)戰(zhàn)隨緣發(fā)布的JCenter,開啟了我為了發(fā)布放棄高數(shù)松捉,放棄大物夹界,放棄現(xiàn)代,放棄離散的漫長踩坑之路隘世。可柿。鸠踪。

P.S.

  • 因?yàn)橹皼]有發(fā)布過開源庫,所以這篇文章更適合小白复斥。营密。。吧目锭,至于大佬嘛评汰。。痢虹。(額被去,你懂)
  • 在開啟踩坑之路之前,我們要學(xué)會科(如)學(xué)(何)上(翻)網(wǎng)(墻)世分。

(不然的話GitHub和Bintray能卡死你)

踩坑一:在Bintray上注冊(這個(gè)真的是血淚史啊编振。。臭埋。務(wù)必看完再注冊)

因?yàn)樵贐inatry版本升級后在注冊界面會有一個(gè)巨大的綠色框框踪央,我想也沒想就注冊了,結(jié)果瓢阴,發(fā)現(xiàn)自己注冊出來了一個(gè)團(tuán)隊(duì)畅蹂,但是你要是創(chuàng)建個(gè)人的開源庫就要個(gè)人的賬號,注冊在右上角的sign in H倏帧R盒薄!注冊地址點(diǎn)這里5隆I倨帷!

向前邁進(jìn):

注冊完了以后要生成自己的maven庫硼被,這個(gè)庫用來存放你的項(xiàng)目(閑扯一句示损,就算你的項(xiàng)目與JCenter注定無緣,不怕嚷硫,只要在gradlel的build里面加上你maven庫的地址再加上你庫的依賴检访,依然可以使用這個(gè)庫)


踩坑二:maven的m的大小寫

你的庫的類型一定要選Maven名字一定要叫maven(因?yàn)锳S上傳Library時(shí)會默認(rèn)上傳到名叫maven類型為Maven的庫)

向前邁進(jìn):

新建完maven庫就要開始新建上傳到Bintray的Library了,懷著無比激動(dòng)的心情想著自己很快就有第一個(gè)開源庫了,然而事實(shí)證明之前的都在熱身仔掸,這才是開始踩坑的血淚史脆贵。。起暮。

踩坑三:如何新建Library以及Library下面該放些什么

(唔卖氨。。。接下來我的時(shí)間軸會有點(diǎn)混亂)我按照網(wǎng)上的流程寫完了gradle里面的配置后双泪,無比憧憬的等待Bintray審核通過的郵件持搜,等了大概兩天吧密似,終于收到了成功加入JCenter的郵件焙矛,然后我把依賴加到項(xiàng)目里面,gradle的build也通過了残腌,但是在Activity里面并找不到自己的類村斟,后來某位大佬終于告訴了我真相:

把你想上傳的東西都要加在自己新建的Library里,而不是app里面(切到project模式可以看見)抛猫,包括你的想上傳類蟆盹,如果你的類有自己定義的屬性或者用到了app/src/res/values的文件,也要一并加到library/src/res/values里面闺金,因?yàn)殚_源庫是不會上傳你app里的內(nèi)容逾滥。

那接下來我們就跳過Library里面類什么都沒有的version1,以及default-pom.xml莫名無法生成的version2(中間會稍微提一下解決方法)败匹,直接到成功發(fā)布的version3好了.P.S.如果AS在每次打開時(shí)都會在右上角提醒你更新的話(老版的settings里面沒有Android SDK也很不方便)寨昙,先更新吧,因?yàn)槲覀兘酉聛淼呐渲枚加玫氖亲钚碌陌姹鞠颇叮绻峦晏蚰模痔嵝涯愀翽lugin也一起更新吧


如果在更新時(shí)是這個(gè)報(bào)錯(cuò),建議你去設(shè)置網(wǎng)絡(luò)代理槽棍,這個(gè)網(wǎng)上的解決方案很多捉蚤,或者看我的另一篇博客(正在更),我就不贅述了炼七。缆巧。。

繼續(xù)向前:

新建Library豌拙。右鍵點(diǎn)application陕悬,然后選New->Moudle->(在彈出來的提示框里選)Android Library就可以了。


至于Library的名字姆蘸,你隨意吧墩莫,但是別起和你application很像的名字,也別起和你項(xiàng)目沒什么關(guān)系的名字逞敷,因?yàn)間radle依賴?yán)锩鏁幸徊糠质荓ibrary的名字狂秦。

這里我講解一下Gradle依賴的每一部分的來歷:

  1. 首先把你要傳的類放在你Library->src->main->java件夾的下面(注意,我切的是Project的模式)推捐。
  2. 如果你的類有自定義的屬性裂问,要把相應(yīng)的attrs.xml文件移到你Library->src->res->values文件夾下面(如果你的類涉及到app中values的colors什么什么的文件,建議也一起加到你Library下面,在Library中加Values文件夾下面的文件時(shí)堪簿,最好新建痊乾,不要去把a(bǔ)pp中的拖到Library里面,因?yàn)锽uild的時(shí)候可能報(bào)錯(cuò)
  3. 最后我們我們把這些都準(zhǔn)備好后椭更,就可以Share Project On GitHub了哪审。當(dāng)然了,至于怎么在AS上把項(xiàng)目推到GitHub上我就不多說了虑瀑,網(wǎng)上搜一搜教程很多的湿滓,當(dāng)你上傳成功以后你就會看見你AS的右上角會有一個(gè)上傳成功的提示,這個(gè)時(shí)候你就可以去你的GitHub上看你的項(xiàng)目了
  4. 至于我gradle里免得配置基本上都是參考的這篇博客的: AndroidStuio快速發(fā)布開源項(xiàng)目到Jcenter/Bintray.那下面我就直接貼代碼嘍舌狗。
  • 配置項(xiàng)目的gradle:
 buildscript {
    repositories {
        jcenter()
 }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.2'
        // 添加下面兩行代碼即可叽奥。
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
        //就上面的這兩行
    }
 }

 allprojects {
     repositories {
        jcenter()
    }
 }

 task clean(type: Delete) {
    delete rootProject.buildDir
 }
  • 配置Library里面的gradle文件(務(wù)必仔細(xì)閱讀注釋,部分個(gè)人信息的修改都寫在了注釋里了痛侍!)

    apply plugin: 'com.android.library'
    // 這里添加下面兩行代碼朝氓。
    apply plugin: 'com.github.dcendents.android-maven'
    apply plugin: 'com.jfrog.bintray'
    
    android {
       compileSdkVersion 23
       buildToolsVersion "23.0.3"
       resourcePrefix "andserver_res_"
    
       defaultConfig {
            // applicationId "com.yanzhenjie.andserver.sample"
           // 這一行要?jiǎng)h除, 因?yàn)閘ibrary不允許有applicationId主届。
           minSdkVersion 8
           targetSdkVersion 23
           versionCode 1
           versionName '1.0.1'
      }
     }
    dependencies {
    // 如果你的library有依賴別的jar赵哲,這里要把jar依賴進(jìn)來。
    compile fileTree(dir: 'libs', includes: ['*.jar'])
    }
    
    // 項(xiàng)目引用的版本號岂膳,比如compile    
    // 'com.yanzhenjie:andserver:1.0.1'中的1.0.1就是這里配置的誓竿。
    version = "1.0.1"
    
    // 定義兩個(gè)鏈接,下面會用到谈截。
    def siteUrl = 'https://github.com/yanzhenjie/AndServer' // 項(xiàng)目主頁筷屡。
    def gitUrl = 'git@github.com:yanzhenjie/AndServer.git' // Git倉庫的url。
    
    // 唯一包名簸喂,比如compile 'com.yanzhenjie:andserver:1.0.1'中的     com.yanzhenjie就是這里配置的毙死。
    group = "com.yanzhenjie"
    install {
       repositories.mavenInstaller {
       // 生成pom.xml和參數(shù)
       pom {
           project {
               packaging 'aar'
               // 項(xiàng)目描述,復(fù)制我的話喻鳄,這里需要修改扼倘。
               name 'AndServer For Android'// 可選,項(xiàng)目名稱除呵。
               description 'The Android build the framework of the Http server.'// 可選再菊,項(xiàng)目描述。
               url siteUrl // 項(xiàng)目主頁颜曾,這里是引用上面定義好纠拔。
    
               // 軟件開源協(xié)議,現(xiàn)在一般都是Apache License2.0吧泛豪,復(fù)制我的稠诲,這里不需要修改侦鹏。
              licenses {
                  license {
                     name 'The Apache Software License, Version 2.0'
                     url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                  }
               }
    
               //填寫開發(fā)者基本信息,復(fù)制我的臀叙,這里需要修改略水。
               developers {
                  developer {
                      id 'yanzhenjie' // 開發(fā)者的id。
                      name 'yanzhenjie' // 開發(fā)者名字劝萤。
                      email 'smallajax@foxmail.com' // 開發(fā)者郵箱渊涝。
                   }
               }
    
               // SCM,復(fù)制我的稳其,這里不需要修改驶赏。
               scm {
                   connection gitUrl // Git倉庫地址。
                   developerConnection gitUrl // Git倉庫地址既鞠。
                   url siteUrl // 項(xiàng)目主頁。
              }
           }
        }
       }
     }
    // 生成jar包的task盖文,不需要修改嘱蛋。
    task sourcesJar(type: Jar) {
       from android.sourceSets.main.java.srcDirs
       classifier = 'sources'
    }
    // 生成jarDoc的task,不需要修改五续。
    task javadoc(type: Javadoc) {
        source = android.sourceSets.main.java.srcDirs
        classpath +=       project.files(android.getBootClasspath().join(File.pathSeparator))
        // destinationDir = file("../javadoc/")
        failOnError false // 忽略注釋語法錯(cuò)誤洒敏,如果用jdk1.8你的注釋寫的不規(guī)范就編譯不過。
    }
    // 生成javaDoc的jar疙驾,不需要修改凶伙。
    task javadocJar(type: Jar, dependsOn: javadoc) {
        classifier = 'javadoc'
        from javadoc.destinationDir
    }
    artifacts {
        archives javadocJar
        archives sourcesJar
    }
    
    Properties properties = new Properties()
    properties.load(project.rootProject.file('local.properties').newDataInputStream())
    bintray {
        user = properties.getProperty("bintray.user") // Bintray的用戶名。
        key = properties.getProperty("bintray.apikey") // Bintray剛才保存的     ApiKey它碎。
    
        configurations = ['archives']
        pkg {
            repo = "maven"  // 上傳到maven庫函荣。(這里要特別注意,如果寫了maven報(bào)404錯(cuò)誤扳肛,請?jiān)赽intray創(chuàng)建一個(gè)倉庫傻挂,這里填改成你創(chuàng)建的倉庫的名字,如何創(chuàng)建請看下圖挖息。)
            name = "andserver"  // 發(fā)布到Bintray上的項(xiàng)目名字金拒,這里的名字不是compile 'com.yanzhenjie:andserver:1.0.1'中的andserver。
            userOrg = 'bintray_user' // Bintray的用戶名套腹。
            websiteUrl = siteUrl
            vcsUrl = gitUrl
            licenses = ["Apache-2.0"]
            publish = true // 是否是公開項(xiàng)目绪抛。
       }
    }
    
  • 說一下可能有疑問的地方:

  • APIKey和user存放和讀取:
    因?yàn)槲覀兩蟼黜?xiàng)目到github上的時(shí)候會把gradle文件傳上去电禀,所以不要把帳號密碼的信息直接寫在這里幢码,寫在local.properties中,這里動(dòng)態(tài)讀取鞭呕。
  • 那么問題來了蛤育,apikey在哪里找呢還有上面的git倉庫又在哪里找呢宛官?
  1. 先說一下apikey:

  2. git倉庫地址:
    首先打開你項(xiàng)目在GitHub里的頁面,然后點(diǎn)左邊的一個(gè)綠色的一個(gè)Clone or download的框框,然后把它切換到SSH瓦糕,這時(shí)現(xiàn)實(shí)的就是你git倉庫的地址


把Library上傳到Bintray上

  • 首先我建議把你的項(xiàng)目在AS上再朝GitHub那邊Commit and Push一次底洗,然后就可以準(zhǔn)備傳到Bintray
  • 完成了以后,打開AS的Terminal控制臺咕娄,在里面輸入這兩句(分開輸)
      gradew install                              //系統(tǒng)配置gradle的用戶環(huán)境
      gradew bintrayUpload                        //上傳到Bintray

或者在AS的右邊有一個(gè)Gradle,用里面的插件bintrayUpload來上傳也可以亥揖,但是要切到gradle控制臺里看是否BUILD SUCCESSFUL.
(感覺命令行更好用些)

去你Bintray的maven倉庫下進(jìn)行確認(rèn)是否上傳成功

如果你到Bintray上發(fā)現(xiàn)你的項(xiàng)目存在,但是下面沒有Gradle的依賴圣勒,大概就像這樣:
正常的庫


不正常的庫(假裝有圖)

這個(gè)费变。。圣贸。由于換電腦的原因挚歧,之前留的圖片全都沒備份就把上一個(gè)電腦的系統(tǒng)重裝了(啊啊啊,暴風(fēng)式哭泣吁峻。滑负。。
總之就是用含,上面那張圖的最下面的gradle可以復(fù)制的一段代碼消失了矮慕,沒有可以導(dǎo)入的庫的代碼

如果有可復(fù)制的依賴代碼,那么說明你的庫就已經(jīng)上傳成功啦啄骇,要是沒有的話建議去看一下Android Studio 的gradle控制臺在run的時(shí)候有沒有報(bào)錯(cuò)痴鳄,比如說哪一個(gè)文件沒有生成或者生成的時(shí)候出現(xiàn)了問題之類的。

最后一步:添加到j(luò)center,提交給管理員審核

最后一步最關(guān)鍵的審核你和管理員的緣分(哈哈哈缸夹,開玩笑的)其實(shí)我感覺我都還好痪寻,沒遇到傳說中審核沒通過的事情,基本上提交了以后等一陣子(一般是1~3天都會有回復(fù)明未,如果沒有通過我記得會給原因槽华。。趟妥。吧)

提交步驟很簡單猫态,在頁面左側(cè)有一個(gè) Linked to(0), 然后你只要點(diǎn)下面的Add to JCenter 按鈕就可以,然后在彈出的提交界面寫上對應(yīng)的信息就好啦披摄,然后就可以等管理員審核過后給你在Binary上綁定的郵箱里面發(fā)通知郵件咯

啰嗦一些可能遇見的小問題

  • 如果報(bào)錯(cuò)了建議先去看gradle控制臺的運(yùn)行記錄亲雪,看里面有沒有什么異常

  • 關(guān)于default-pom.xml莫名無法生成 :
    這一個(gè)問題我一般是直接刪掉之前放開源庫相應(yīng)代碼的package,然后直接新建一個(gè)package疚膊,名字要和之前的package一樣义辕,但是在build.gradle 里面的version(即版本號)要改一個(gè)新的版本號,然后也是上面的步驟再重復(fù)一遍寓盗。

    但是在有一篇博客里提到了關(guān)于default-pom.xml無法生成的解決方法灌砖,要是嫌上面的方法麻煩的話璧函,可以看一下解決方法(我沒有試過)。

然后基本上就是這些啦基显,要是還有什么為問題的話可以在評論區(qū)留言呀蘸吓。

這是我第一次寫博客,啰里八嗦說了一大堆撩幽,措辭也要改進(jìn)库继,而且自己也拖了好久,唉窜醉,感覺自己好菜啊宪萄,如果有什么不足之處希望大家直接說好了,我是一個(gè)耿直girl榨惰,不會介意的拜英,最后就是蟹蟹大家能一直看到最后,又聽我啰里八嗦一大堆读串。

哈哈(尬笑

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末聊记,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子恢暖,更是在濱河造成了極大的恐慌,老刑警劉巖狰右,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件杰捂,死亡現(xiàn)場離奇詭異,居然都是意外死亡棋蚌,警方通過查閱死者的電腦和手機(jī)嫁佳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谷暮,“玉大人蒿往,你說我怎么就攤上這事∈遥” “怎么了瓤漏?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長颊埃。 經(jīng)常有香客問我蔬充,道長,這世上最難降的妖魔是什么班利? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任饥漫,我火速辦了婚禮,結(jié)果婚禮上罗标,老公的妹妹穿的比我還像新娘庸队。我一直安慰自己积蜻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布彻消。 她就那樣靜靜地躺著竿拆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪证膨。 梳的紋絲不亂的頭發(fā)上如输,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機(jī)與錄音央勒,去河邊找鬼不见。 笑死,一個(gè)胖子當(dāng)著我的面吹牛崔步,可吹牛的內(nèi)容都是我干的稳吮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼井濒,長吁一口氣:“原來是場噩夢啊……” “哼灶似!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起瑞你,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤酪惭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后者甲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體春感,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年虏缸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了鲫懒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡刽辙,死狀恐怖窥岩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宰缤,我是刑警寧澤颂翼,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站撵溃,受9級特大地震影響疚鲤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜缘挑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一集歇、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧语淘,春花似錦诲宇、人聲如沸际歼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鹅心。三九已至,卻和暖如春纺荧,著一層夾襖步出監(jiān)牢的瞬間旭愧,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工宙暇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留输枯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓占贫,卻偏偏與公主長得像桃熄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子型奥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

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