Bintray項(xiàng)目發(fā)布-GradleBintrayPlugin

前言

本文介紹如何使用Bintray官方的Gradle插件gradle-bintray-plugin發(fā)布項(xiàng)目到Bintray平臺疙咸,并最終發(fā)布到JCenter雳锋。

主要參考官方的gradle-bintray-plugin wiki和項(xiàng)目示例bintray-examples。不過說實(shí)話官方wiki和示例寫得都比較粗糙捡硅。

gradle-bintray-plugin插件在生成構(gòu)件時有三種方式: Configurations, Publications and Copying files昼牛。每種方式的配置都有所不同奄容,我們這里只說比較常見的Configurations和Publications兩種方式,這也是wiki上比較推薦的方式啡邑。

源碼地址贱勃。本文涉及到的nicelogger項(xiàng)目Github地址:https://github.com/zhangliangnbu/nice-logger


準(zhǔn)備工作

參考上一篇文章,如果已經(jīng)做了谤逼,可以跳過贵扰。默認(rèn)你已經(jīng)有了一個本地項(xiàng)目,已經(jīng)創(chuàng)建了Bintray平臺賬號和Maven倉庫流部。

定義參數(shù)

  • Bintray平臺倉庫名稱戚绕。android
  • Bintray平臺Package名稱枝冀。nicelogger舞丛。
  • POM文件groupIdcom.liang.android果漾。
  • POM文件artifactId球切。nicelogger
  • POM文件version绒障。取0.0.6吨凑。

準(zhǔn)備本地項(xiàng)目。有的話就不用創(chuàng)建端盆。

配置Bintray平臺怀骤。創(chuàng)建package费封,如果已經(jīng)有了就不用創(chuàng)建了。


使用Publications方式發(fā)布項(xiàng)目

插件倉庫配置

根據(jù)wiki上的說明蒋伦,Gradle >= 2.1之后就可以不用單獨(dú)配置插件倉庫路徑了弓摘,估計是已經(jīng)包含在JCenter倉庫里,我使用的是Gradle 4.6痕届,也不用單獨(dú)配置插件倉庫路徑韧献。

參數(shù)配置

主要包括三個部分:Bintray平臺參數(shù)配置、POM和構(gòu)件文件參數(shù)配置研叫、構(gòu)件文件生成配置锤窑。

單獨(dú)用一個文件gradleBintrayPluginPublicationsUpload.gradle維護(hù)這些配置,然后在module的build.gradle中引用嚷炉。

項(xiàng)目build.gradle文件末尾添加:

apply from: './gradleBintrayPluginPublicationsUpload.gradle'

gradleBintrayPluginPublicationsUpload.gradle配置如下:

// 插件渊啰。無需另外單獨(dú)配置插件倉庫地址
apply plugin: 'maven-publish'
apply plugin: 'com.jfrog.bintray'

// 定義參數(shù)
def gitUrl = 'https://github.com/zhangliangnbu/nice-logger.git'   // Git倉庫的url
def groupIdDefined = "com.liang.android"
def artifactIdDefined = "nicelogger"
def versionDefined = "0.0.5"

// bintray平臺信息配置
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty("bintray.user") // local.properties里設(shè)置
    key = properties.getProperty("bintray.apikey") // local.properties里設(shè)置
    publications = ['MyPublication'] // 'MyPublication'與下面的publishing閉包里的名稱對應(yīng)
    publish = true // 上傳后立即發(fā)布到Bintray平臺
    pkg {
        repo = "android"  // 必填。bintray平臺倉庫名申屹,必須已經(jīng)創(chuàng)建過绘证。
        name = "nicelogger"  // 必填。倉庫里包package的名稱哗讥,沒有的話會自動創(chuàng)建嚷那。
        licenses = ["Apache-2.0"] // 首次創(chuàng)建package則必須,否則選填杆煞。
        vcsUrl = gitUrl // 首次創(chuàng)建package則必須魏宽,否則選填。
        version {
            name = "$versionDefined"
        }
    }
}


// 構(gòu)件文件和POM信息配置
publishing {
    publications {
        MyPublication(MavenPublication) {
            artifact("$buildDir/outputs/aar/nicelogger-release.aar")
            artifact sourcesJar
            artifact javadocJar
            groupId "$groupIdDefined"
            artifactId "$artifactIdDefined"
            version "$versionDefined"
            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')
                // Iterate over the implementation dependencies (we don't want the test ones), adding a <dependency> node for each
                configurations.implementation.allDependencies.each {
                    // Ensure dependencies such as fileTree are not included in the pom.
                    if (it.name != 'unspecified') {
                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', it.group)
                        dependencyNode.appendNode('artifactId', it.name)
                        dependencyNode.appendNode('version', it.version)
                    }
                }
            }
        }
    }
}

// 生成sourceJar和javaDocJar構(gòu)件
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

task javadoc(type: Javadoc) {
    failOnError false
    source = android.sourceSets.main.java.sourceFiles
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    classpath += configurations.compile
}
task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives sourcesJar
    archives javadocJar
}

注釋里已經(jīng)有說明了决乎,補(bǔ)充幾點(diǎn)如下:

  • bintray平臺信息配置队询。userkey是自己的私有參數(shù),寫在本地local.properties文件中瑞驱。
  • 先要生成構(gòu)件文件娘摔,之后才能上傳。

發(fā)布

執(zhí)行命令./gradlew clean build bintrayUpload唤反,即可發(fā)布項(xiàng)目到Bintray平臺凳寺,然后一鍵發(fā)布到JCenter。


使用Configurations方式發(fā)布項(xiàng)目

插件倉庫配置

這種方式需要用到android-maven-gradle-plugin彤侍。在工程根目錄build.gradle中添加倉庫路徑:

buildscript {
    dependencies {
        // bintray plugin for configuration method
        classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
    }
}

參數(shù)配置

主要包括三個部分:Bintray平臺參數(shù)配置肠缨、POM和構(gòu)件文件參數(shù)配置、構(gòu)件文件生成配置盏阶。

單獨(dú)用一個文件gradleBintrayConfigurationsUpload.gradle維護(hù)這些配置晒奕,然后在module的build.gradle中引用。

項(xiàng)目build.gradle文件末尾添加:

apply from: './gradleBintrayConfigurationsUpload.gradle'

gradleBintrayConfigurationsUpload.gradle配置如下:

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

// 定義參數(shù)
def gitUrl = 'https://github.com/zhangliangnbu/nice-logger.git'   // Git倉庫的url
def groupIdDefined = "com.liang.android"
def artifactIdDefined = "nicelogger"
def versionDefined = "0.0.7"

// 待發(fā)布項(xiàng)目的groupId和version。android-maven-gradle-plugin插件需要這么配置脑慧。
group = "$groupIdDefined"
version = "$versionDefined"

// bintray平臺信息配置
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
bintray {
    user = properties.getProperty("bintray.user") // local.properties里設(shè)置
    key = properties.getProperty("bintray.apikey") // local.properties里設(shè)置
    configurations = ['archives']
    publish = true
    pkg {
        repo = "android"  // 必填魄眉。bintray平臺倉庫名,必須已經(jīng)創(chuàng)建過闷袒。
        name = "nicelogger"  // 必填坑律。倉庫里包package的名稱,沒有的話會自動創(chuàng)建囊骤。
        licenses = ["Apache-2.0"] // 首次創(chuàng)建package則必須晃择,否則選填。
        vcsUrl = gitUrl // 首次創(chuàng)建package則必須也物,否則選填宫屠。
        version {
            name = "$versionDefined"
        }
    }
}

// pom文件信息配置
install {
    repositories.mavenInstaller {
        pom.project {
            groupId "$groupIdDefined"
            artifactId "$artifactIdDefined"
            version "$versionDefined"
            packaging 'aar'

            licenses {
                license {
                    name 'The Apache Software License, Version 2.0'
                    url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                }
            }
        }
    }
}

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

task javadoc(type: Javadoc) {
    failOnError false
    source = android.sourceSets.main.java.sourceFiles
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    classpath += configurations.compile
}
task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives sourcesJar
    archives javadocJar
}

// 執(zhí)行 ./gradlew clean bintrayUpload

補(bǔ)充說明如下:

  • android-maven-gradle-plugin的wiki上說需要在settings.gradle里配置artifactId,但我沒有配置也發(fā)布成功了。
  • 不需要單獨(dú)執(zhí)行構(gòu)件生成任務(wù)滑蚯,應(yīng)該是在bintrayUpload中已經(jīng)做了處理浪蹂。

發(fā)布

執(zhí)行命令./gradlew clean bintrayUpload,即可發(fā)布項(xiàng)目到Bintray平臺告材,然后一鍵發(fā)布到JCenter乌逐。


小結(jié)

是不是感覺使用官方插件挺繁瑣的?我的配置是非常精簡的创葡,選填的參數(shù)幾乎沒有填,看官方示例绢慢,配置真是繁瑣灿渴。

到目前為止,已經(jīng)介紹了三種發(fā)布項(xiàng)目到JCenter的方式胰舆,推薦使用BintrayRelease方式骚露,配置簡潔、易于維護(hù)缚窿。


參考

  1. gradle-bintray-plugin
  2. gradle-bintray-plugin wiki
  3. bintray-examples
  4. android-maven-gradle-plugin

注:文章首發(fā)簡書和我的個人博客永恒的碼流棘幸。


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市倦零,隨后出現(xiàn)的幾起案子误续,更是在濱河造成了極大的恐慌,老刑警劉巖扫茅,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹋嵌,死亡現(xiàn)場離奇詭異,居然都是意外死亡葫隙,警方通過查閱死者的電腦和手機(jī)栽烂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人腺办,你說我怎么就攤上這事焰手。” “怎么了怀喉?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵书妻,是天一觀的道長。 經(jīng)常有香客問我磺送,道長驻子,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任估灿,我火速辦了婚禮崇呵,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘馅袁。我一直安慰自己域慷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布汗销。 她就那樣靜靜地躺著犹褒,像睡著了一般。 火紅的嫁衣襯著肌膚如雪弛针。 梳的紋絲不亂的頭發(fā)上叠骑,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機(jī)與錄音削茁,去河邊找鬼宙枷。 笑死,一個胖子當(dāng)著我的面吹牛茧跋,可吹牛的內(nèi)容都是我干的慰丛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瘾杭,長吁一口氣:“原來是場噩夢啊……” “哼诅病!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起粥烁,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤贤笆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后页徐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體苏潜,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年变勇,在試婚紗的時候發(fā)現(xiàn)自己被綠了恤左。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贴唇。...
    茶點(diǎn)故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖飞袋,靈堂內(nèi)的尸體忽然破棺而出戳气,到底是詐尸還是另有隱情,我是刑警寧澤巧鸭,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布瓶您,位于F島的核電站,受9級特大地震影響纲仍,放射性物質(zhì)發(fā)生泄漏呀袱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一郑叠、第九天 我趴在偏房一處隱蔽的房頂上張望夜赵。 院中可真熱鬧,春花似錦乡革、人聲如沸寇僧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嘁傀。三九已至,卻和暖如春视粮,著一層夾襖步出監(jiān)牢的瞬間细办,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工蕾殴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蟹腾,地道東北人。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓区宇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親值戳。 傳聞我的和親對象是個殘疾皇子议谷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評論 2 354

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

  • 前言 發(fā)布項(xiàng)目的定義。發(fā)布項(xiàng)目到遠(yuǎn)程JCenter倉庫堕虹,準(zhǔn)確的說是發(fā)布項(xiàng)目構(gòu)件到JCenter倉庫卧晓,用英語說是Pu...
    十思葉閱讀 1,337評論 0 1
  • 前言 本文主要說明如何生成項(xiàng)目構(gòu)件,并手動上傳構(gòu)件文件到Bintray平臺赴捞,最后發(fā)布到JCenter倉庫這一流程逼裆。...
    十思葉閱讀 1,683評論 1 6
  • 前言 使用Gradle插件上傳Android項(xiàng)目到Bintray平臺是目前通用的做法,很方便赦政。目前常用的Gradl...
    十思葉閱讀 1,880評論 0 3
  • 喜歡裹在被窩里胜宇,回想整一天發(fā)生的事耀怜,這是我快速入睡的秘訣。什么重要的事情也沒做桐愉,便越發(fā)覺得自己無能财破,惰性開...
    所羅門寶藏_490e閱讀 233評論 0 0
  • 秋風(fēng)撫柳葉落如沙,秋夜月明老樹寒鴉从诲。秋季已至左痢,就連草叢里蟋蟀的叫聲都有一種凄涼的感覺,就好像它知道秋天來了自己...
    谷戰(zhàn)閱讀 280評論 0 3