多個(gè)語言項(xiàng)目發(fā)布JCenter倉庫的小結(jié)

我在 JCenter 上發(fā)布過 Java、Android嚣州、Kotlin 的項(xiàng)目已經(jīng)有數(shù)十個(gè)了鲫售。踩坑無數(shù),所以寫下這篇文章避诽,作為記錄和總結(jié)龟虎。

JCenter是什么?

它是由 JFrog 公司提供的 Bintray 中的 Java 倉庫沙庐。它是當(dāng)前世界上最大的 Java 和 Android 開源軟件構(gòu)件倉庫鲤妥。 所有內(nèi)容都通過內(nèi)容分發(fā)網(wǎng)絡(luò)(CDN)使用加密https連接獲取。JCenter是Goovy Grape內(nèi)的默認(rèn)倉庫拱雏,Gradle內(nèi)建支持(jcenter()倉庫)棉安,非常易于在(可能除了Maven之外的)其他構(gòu)建工具內(nèi)進(jìn)行配置。
與 Maven Central 相比铸抑,JCenter 的速度更快贡耽,包含的庫更多,UI界面更友好鹊汛,更容易使用蒲赂,同時(shí) Bintray 還支持將 JCenter 上傳到 Maven Central 的功能。

越來越多的Java刁憋、Android開發(fā)者已經(jīng)從 Eclipse 平臺(tái)轉(zhuǎn)移到 Intellij 和 Android Studio滥嘴。其中,Android Studio 默認(rèn)使用gradle作為構(gòu)建工具至耻。用來導(dǎo)入第三方的庫非常方便若皱,只需要一句話就可以搞定整個(gè)包的導(dǎo)入過程。而且 JCenter 是 Android Studio 默認(rèn)使用的服務(wù)器倉庫尘颓。

compile 'com.safframework.log:saf-log:1.0.4'

Bintray的注冊(cè)

個(gè)人注冊(cè) Bintray 地址:https://bintray.com/signup/oss
不要去 https://bintray.com/login 注冊(cè)走触,這個(gè)千萬不能搞錯(cuò)。國內(nèi)用戶可以使用github的賬號(hào)進(jìn)行登陸完成注冊(cè)疤苹。

注冊(cè)完之后互广,需要注意這個(gè)API Key一定要保存好,因?yàn)閷㈨?xiàng)目發(fā)布到JCenter時(shí)會(huì)用到它痰催。


獲取個(gè)人的API Key.jpeg

注冊(cè)完之后兜辞,第一件事情是"Add New Repository"迎瞧。

Add New Repository.jpeg

點(diǎn)擊之后就是創(chuàng)建Repository了,記得下圖中紅框的位置一定要填小寫的maven逸吵,否則無法發(fā)布上去:(

Create Respository.jpeg

Repository創(chuàng)建完之后凶硅,我們就可以正式進(jìn)入發(fā)布項(xiàng)目之旅了。

Android項(xiàng)目如何發(fā)布扫皱?

1. 發(fā)布步驟

A. 根目錄下build.gradle

先添加

buildscript {
    
    ...
    dependencies {
        ...
        classpath 'com.novoda:bintray-release:0.4.0'
    }
}

以及

allprojects {
    repositories {
        jcenter()
    }
    //加上這些
    tasks.withType(Javadoc) {
        options{ encoding "UTF-8"
            charSet 'UTF-8'
            links "http://docs.oracle.com/javase/7/docs/api"
        }
    }
}

B. 需要發(fā)布的module足绅,修改build.gradle文件

先添加插件

apply plugin: 'com.novoda.bintray-release'

再加上publish

allprojects {
    repositories {
        jcenter()
    }
    //加上這些
    tasks.withType(Javadoc) {
        options{ encoding "UTF-8"
            charSet 'UTF-8'
            links "http://docs.oracle.com/javase/7/docs/api"
        }
    }
}

publish{
    userOrg = 'fengzhizi715' // Bintray 賬號(hào)名
    groupId = 'com.safframework'
    artifactId = 'saf-aop'
    publishVersion = '1.0.0'
    desc = 'this is an aop library for android'
    website = 'https://github.com/fengzhizi715/SAF-AOP'
}

假如 JCenter 審核通過,就可以用多種方式添加該庫了韩脑。
使用gradle添加該庫:

compile 'com.safframework:saf-aop:1.0.0'

使用maven添加該庫:

<dependency>
  <groupId>com.safframework</groupId>
  <artifactId>saf-aop</artifactId>
  <version>1.0.0</version>
  <type>pom</type>
</dependency>

C. 發(fā)布

執(zhí)行下面的語句

./gradlew clean build bintrayUpload -PbintrayUser=***** -PbintrayKey=************** -PdryRun=false

其中氢妈,PbintrayUser參數(shù)是Bintray的用戶名,
PbintrayKey參數(shù)是先前注冊(cè)賬號(hào)之后獲取的API Key段多。

D. 發(fā)布完之后

不是執(zhí)行完上述的語句就算完了首量,還需要通過 JCenter 的審核。

當(dāng)然不通過審核也是可以使用的进苍,在根目錄的build.gradle中添加形如下面的腳本

allprojects {
    repositories {
        jcenter()
          maven{url 'https://dl.bintray.com/fengzhizi715/maven/'}
    }
    //加上這些
    tasks.withType(Javadoc) {
        options{ encoding "UTF-8"
            charSet 'UTF-8'
            links "http://docs.oracle.com/javase/7/docs/api"
        }
    }
}

最為重要的是下面這一句加缘,但是通過審核的話完全不需要添加這一句。

maven{url 'https://dl.bintray.com/fengzhizi715/maven/'}

所以觉啊,我們需要通過JCenter審核拣宏,否則沒有意義。


add to JCenter.jpeg
add comments.jpeg

E. 審核通過

JCenter 會(huì)通過郵件和站內(nèi)消息的形式通知到你杠人,一般情況是幾個(gè)小時(shí)之后勋乾,我也遇到過1天多的情況,完全看人品嗡善。個(gè)人經(jīng)驗(yàn)是晚上12點(diǎn)多發(fā)布辑莫,差不多2點(diǎn)多會(huì)審核通過。

審核通過后罩引,就可以盡情地在項(xiàng)目中使用了摆昧。

發(fā)布成功.jpeg

2. 升級(jí)庫

發(fā)布新版本時(shí),必須修改publish的publishVersion蜒程。如果publishVersion已經(jīng)存在,上傳時(shí)會(huì)報(bào)錯(cuò)并給出如下類似的提示伺帘。

* What went wrong:
Execution failed for task ':saf-aop:bintrayUpload'.
> Could not upload to 'https://api.bintray.com/content/fengzhizi715/maven/saf-aop/1.0.0/com/safframework/saf-aop/1.0.0/saf-aop-1.0.0-sources.jar': HTTP/1.1 409 Conflict [message:Unable to upload files: An artifact with the path 'com/safframework/saf-aop/1.0.0/saf-aop-1.0.0-sources.jar' already exists]

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

BUILD FAILED

需要將版本號(hào)修改昭躺,必須高于原先的版本號(hào)。

3. 項(xiàng)目中包含多個(gè)module的注意事項(xiàng)

<<用kotlin打造簡化版本的ButterKnife>>中有三個(gè)module:

項(xiàng)目結(jié)構(gòu)圖.png

我將每個(gè)module都發(fā)布到 JCenter 上伪嫁,如果某一個(gè)module需要升級(jí)领炫,怎么辦?

可以在工程最外層的build.gradle底部添加

tasks.getByPath(":saf-injectview:bintrayUpload").enabled = true // 假設(shè)saf-injectview需要升級(jí)张咳,其他module不用升級(jí)
tasks.getByPath(":saf-injectview-compiler:bintrayUpload").enabled = false
tasks.getByPath(":saf-injectview-annotations:bintrayUpload").enabled = false

簡而言之就是

tasks.getByPath(":需要升級(jí)的module:bintrayUpload").enabled = true
tasks.getByPath(":不需要升級(jí)的module:bintrayUpload").enabled = false

最后再執(zhí)行二進(jìn)制上傳:

./gradlew clean build bintrayUpload -PbintrayUser=***** -PbintrayKey=************** -PdryRun=false

Kotlin項(xiàng)目如何發(fā)布?

1. Kotlin for Android項(xiàng)目

除了跟 Android 項(xiàng)目一樣之外帝洪。還需要在module的build.gradle中額外添加

android {
    ...
    sourceSets {
        main.java.srcDirs += 'src/main/kotlin'
    }
}

值得注意的是似舵,以前發(fā)布日志框架時(shí)遇到過一次坑。報(bào):saf-log:releaseAndroidJavadocs出錯(cuò)葱峡。

我在根目錄的build.gradle中添加以下腳本即可

tasks.getByPath(":saf-log:releaseAndroidJavadocs").enabled = false

其他的項(xiàng)目沒有遇到過這種情況砚哗。

2. 單獨(dú)的Kotlin項(xiàng)目

同樣卤档,需要在build.gradle中添加類似的腳本

sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
}

貼一段完整的build.gradle

apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'com.novoda.bintray-release'

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
}

sourceCompatibility = "1.7"
targetCompatibility = "1.7"

sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
}

allprojects {
    repositories {
        jcenter()
    }
    //加上這些
    tasks.withType(Javadoc) {
        options{ encoding "UTF-8"
            charSet 'UTF-8'
            links "http://docs.oracle.com/javase/7/docs/api"
        }
    }
}

publish{
    userOrg = 'fengzhizi715'
    groupId = 'com.safframework.injectview'
    artifactId = 'saf-injectview-annotation'
    publishVersion = '1.0.0'
    desc = 'The annotation used in saf injectview library'
    website = 'https://github.com/fengzhizi715/SAF-Kotlin-InjectView'
}

雖然這是一個(gè) Java 工程友雳,但是它完全用 Kotlin 進(jìn)行編寫玻蝌≡涫裕可以參考我以前的文章<<用kotlin打造簡化版本的ButterKnife>>

兩種 Kotlin 的項(xiàng)目發(fā)布方式都一樣:

./gradlew clean build bintrayUpload -PbintrayUser=***** -PbintrayKey=************** -PdryRun=false

Java項(xiàng)目如何發(fā)布哗脖?

在Mac平臺(tái)下绍些,Java工程的發(fā)布跟上面的都類似晕拆。
我遇到過gradlew這個(gè)命令權(quán)限不夠绘梦,只需用chmod命令修改下權(quán)限胸哥。

chomd 777 gradlew

總結(jié)

看完是不是覺得借助 gradle 將項(xiàng)目發(fā)布到 JCenter 很酷而且一點(diǎn)也不難涯竟,也有沖動(dòng)把自己的"輪子"發(fā)布到 JCenter 上?如果有的話空厌,趕緊發(fā)布吧庐船,方便自己也方便大家使用:)。

最后蝇庭,注意com.novoda.bintray-release這個(gè)插件已經(jīng)升級(jí)到0.5.0版本醉鳖,如果gradle還在使用3.3以及之前的版本,請(qǐng)不要使用這個(gè)插件的0.5.0版本哮内,否則會(huì)無法上傳成功盗棵,請(qǐng)使用0.4.0版本。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末北发,一起剝皮案震驚了整個(gè)濱河市纹因,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌琳拨,老刑警劉巖瞭恰,帶你破解...
    沈念sama閱讀 216,997評(píng)論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異狱庇,居然都是意外死亡惊畏,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,603評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門密任,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颜启,“玉大人,你說我怎么就攤上這事浪讳$终担” “怎么了?”我有些...
    開封第一講書人閱讀 163,359評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長口猜。 經(jīng)常有香客問我负溪,道長,這世上最難降的妖魔是什么济炎? 我笑而不...
    開封第一講書人閱讀 58,309評(píng)論 1 292
  • 正文 為了忘掉前任川抡,我火速辦了婚禮,結(jié)果婚禮上冻辩,老公的妹妹穿的比我還像新娘猖腕。我一直安慰自己,他們只是感情好恨闪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,346評(píng)論 6 390
  • 文/花漫 我一把揭開白布倘感。 她就那樣靜靜地躺著,像睡著了一般咙咽。 火紅的嫁衣襯著肌膚如雪老玛。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,258評(píng)論 1 300
  • 那天钧敞,我揣著相機(jī)與錄音蜡豹,去河邊找鬼。 笑死溉苛,一個(gè)胖子當(dāng)著我的面吹牛镜廉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播愚战,決...
    沈念sama閱讀 40,122評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼娇唯,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了寂玲?” 一聲冷哼從身側(cè)響起塔插,我...
    開封第一講書人閱讀 38,970評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拓哟,沒想到半個(gè)月后想许,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,403評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡断序,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,596評(píng)論 3 334
  • 正文 我和宋清朗相戀三年流纹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片违诗。...
    茶點(diǎn)故事閱讀 39,769評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捧颅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出较雕,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,464評(píng)論 5 344
  • 正文 年R本政府宣布亮蒋,位于F島的核電站扣典,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏慎玖。R本人自食惡果不足惜贮尖,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,075評(píng)論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望趁怔。 院中可真熱鬧湿硝,春花似錦、人聲如沸润努。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,705評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽铺浇。三九已至痢畜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鳍侣,已是汗流浹背丁稀。 一陣腳步聲響...
    開封第一講書人閱讀 32,848評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倚聚,地道東北人线衫。 一個(gè)月前我還...
    沈念sama閱讀 47,831評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像惑折,于是被迫代替她去往敵國和親授账。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,678評(píng)論 2 354

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