論一個小白如何將自己的開源庫發布到Bintray的JCenter上

在前一陣子的某一天,我不小心撞上了JitPack的版本升級而導致的JitPack炸了,于是無法把自己的庫發布成有效的開源庫,無奈之下,我終于下定決心轉戰隨緣發布的JCenter,開啟了我為了發布放棄高數,放棄大物,放棄現代,放棄離散的漫長踩坑之路。。。

P.S.

  • 因為之前沒有發布過開源庫,所以這篇文章更適合小白。。。吧,至于大佬嘛。。。(額,你懂)
  • 在開啟踩坑之路之前,我們要學會科(如)學(何)上(翻)網(墻)。

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

踩坑一:在Bintray上注冊(這個真的是血淚史啊。。。務必看完再注冊)

因為在Binatry版本升級后在注冊界面會有一個巨大的綠色框框,我想也沒想就注冊了,結果,發現自己注冊出來了一個團隊,但是你要是創建個人的開源庫就要個人的賬號,注冊在右上角的sign in ?。。?a target="_blank" rel="nofollow">注冊地址點這里!??!

向前邁進:

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


踩坑二:maven的m的大小寫

你的庫的類型一定要選Maven名字一定要叫maven(因為AS上傳Library時會默認上傳到名叫maven類型為Maven的庫)

向前邁進:

新建完maven庫就要開始新建上傳到Bintray的Library了,懷著無比激動的心情想著自己很快就有第一個開源庫了,然而事實證明之前的都在熱身,這才是開始踩坑的血淚史。。。

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

(唔。。。接下來我的時間軸會有點混亂)我按照網上的流程寫完了gradle里面的配置后,無比憧憬的等待Bintray審核通過的郵件,等了大概兩天吧,終于收到了成功加入JCenter的郵件,然后我把依賴加到項目里面,gradle的build也通過了,但是在Activity里面并找不到自己的類,后來某位大佬終于告訴了我真相:

把你想上傳的東西都要加在自己新建的Library里,而不是app里面(切到project模式可以看見),包括你的想上傳類,如果你的類有自己定義的屬性或者用到了app/src/res/values的文件,也要一并加到library/src/res/values里面,因為開源庫是不會上傳你app里的內容。

那接下來我們就跳過Library里面類什么都沒有的version1,以及default-pom.xml莫名無法生成的version2(中間會稍微提一下解決方法),直接到成功發布的version3好了.P.S.如果AS在每次打開時都會在右上角提醒你更新的話(老版的settings里面沒有Android SDK也很不方便),先更新吧,因為我們接下來的配置都用的是最新的版本,如果更新完,又提醒你更新Plugin也一起更新吧


如果在更新時是這個報錯,建議你去設置網絡代理,這個網上的解決方案很多,或者看我的另一篇博客(正在更),我就不贅述了。。。

繼續向前:

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


至于Library的名字,你隨意吧,但是別起和你application很像的名字,也別起和你項目沒什么關系的名字,因為gradle依賴里面會有一部分是Library的名字。

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

  1. 首先把你要傳的類放在你Library->src->main->java件夾的下面(注意,我切的是Project的模式)。
  2. 如果你的類有自定義的屬性,要把相應的attrs.xml文件移到你Library->src->res->values文件夾下面(如果你的類涉及到app中values的colors什么什么的文件,建議也一起加到你Library下面,在Library中加Values文件夾下面的文件時,最好新建,不要去把app中的拖到Library里面,因為Build的時候可能報錯
  3. 最后我們我們把這些都準備好后,就可以Share Project On GitHub了。當然了,至于怎么在AS上把項目推到GitHub上我就不多說了,網上搜一搜教程很多的,當你上傳成功以后你就會看見你AS的右上角會有一個上傳成功的提示,這個時候你就可以去你的GitHub上看你的項目了
  4. 至于我gradle里免得配置基本上都是參考的這篇博客的: AndroidStuio快速發布開源項目到Jcenter/Bintray.那下面我就直接貼代碼嘍。
  • 配置項目的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文件(務必仔細閱讀注釋,部分個人信息的修改都寫在了注釋里了!)

    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"
           // 這一行要刪除, 因為library不允許有applicationId。
           minSdkVersion 8
           targetSdkVersion 23
           versionCode 1
           versionName '1.0.1'
      }
     }
    dependencies {
    // 如果你的library有依賴別的jar,這里要把jar依賴進來。
    compile fileTree(dir: 'libs', includes: ['*.jar'])
    }
    
    // 項目引用的版本號,比如compile    
    // 'com.yanzhenjie:andserver:1.0.1'中的1.0.1就是這里配置的。
    version = "1.0.1"
    
    // 定義兩個鏈接,下面會用到。
    def siteUrl = 'https://github.com/yanzhenjie/AndServer' // 項目主頁。
    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和參數
       pom {
           project {
               packaging 'aar'
               // 項目描述,復制我的話,這里需要修改。
               name 'AndServer For Android'// 可選,項目名稱。
               description 'The Android build the framework of the Http server.'// 可選,項目描述。
               url siteUrl // 項目主頁,這里是引用上面定義好。
    
               // 軟件開源協議,現在一般都是Apache License2.0吧,復制我的,這里不需要修改。
              licenses {
                  license {
                     name 'The Apache Software License, Version 2.0'
                     url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                  }
               }
    
               //填寫開發者基本信息,復制我的,這里需要修改。
               developers {
                  developer {
                      id 'yanzhenjie' // 開發者的id。
                      name 'yanzhenjie' // 開發者名字。
                      email 'smallajax@foxmail.com' // 開發者郵箱。
                   }
               }
    
               // SCM,復制我的,這里不需要修改。
               scm {
                   connection gitUrl // Git倉庫地址。
                   developerConnection gitUrl // Git倉庫地址。
                   url siteUrl // 項目主頁。
              }
           }
        }
       }
     }
    // 生成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 // 忽略注釋語法錯誤,如果用jdk1.8你的注釋寫的不規范就編譯不過。
    }
    // 生成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報404錯誤,請在bintray創建一個倉庫,這里填改成你創建的倉庫的名字,如何創建請看下圖。)
            name = "andserver"  // 發布到Bintray上的項目名字,這里的名字不是compile 'com.yanzhenjie:andserver:1.0.1'中的andserver。
            userOrg = 'bintray_user' // Bintray的用戶名。
            websiteUrl = siteUrl
            vcsUrl = gitUrl
            licenses = ["Apache-2.0"]
            publish = true // 是否是公開項目。
       }
    }
    
  • 說一下可能有疑問的地方:

  • APIKey和user存放和讀?。?/strong>
    因為我們上傳項目到github上的時候會把gradle文件傳上去,所以不要把帳號密碼的信息直接寫在這里,寫在local.properties中,這里動態讀取。
  • 那么問題來了,apikey在哪里找呢還有上面的git倉庫又在哪里找呢?
  1. 先說一下apikey:

  2. git倉庫地址:
    首先打開你項目在GitHub里的頁面,然后點左邊的一個綠色的一個Clone or download的框框,然后把它切換到SSH,這時現實的就是你git倉庫的地址


把Library上傳到Bintray上

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

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

去你Bintray的maven倉庫下進行確認是否上傳成功

如果你到Bintray上發現你的項目存在,但是下面沒有Gradle的依賴,大概就像這樣:
正常的庫


不正常的庫(假裝有圖)

這個。。。由于換電腦的原因,之前留的圖片全都沒備份就把上一個電腦的系統重裝了(啊啊啊,暴風式哭泣。。。
總之就是,上面那張圖的最下面的gradle可以復制的一段代碼消失了,沒有可以導入的庫的代碼

如果有可復制的依賴代碼,那么說明你的庫就已經上傳成功啦,要是沒有的話建議去看一下Android Studio 的gradle控制臺在run的時候有沒有報錯,比如說哪一個文件沒有生成或者生成的時候出現了問題之類的。

最后一步:添加到jcenter,提交給管理員審核

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

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

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

  • 如果報錯了建議先去看gradle控制臺的運行記錄,看里面有沒有什么異常

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

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

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

這是我第一次寫博客,啰里八嗦說了一大堆,措辭也要改進,而且自己也拖了好久,唉,感覺自己好菜啊,如果有什么不足之處希望大家直接說好了,我是一個耿直girl,不會介意的,最后就是蟹蟹大家能一直看到最后,又聽我啰里八嗦一大堆。

哈哈(尬笑

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,563評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,694評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,672評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,965評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,690評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,019評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,013評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,188評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,718評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,438評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,667評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,149評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,845評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,252評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,590評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,384評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容