Bintray项目发布-GradleBintrayPlugin

前言

本文介绍如何使用Bintray官方的Gradle插件gradle-bintray-plugin发布项目到Bintray平台,并最终发布到JCenter。

主要参考官方的gradle-bintray-plugin wiki和项目示例bintray-examples。不过说实话官方wiki和示例写得都比较粗糙。

gradle-bintray-plugin插件在生成构件时有三种方式: Configurations, Publications and Copying files。每种方式的配置都有所不同,我们这里只说比较常见的Configurations和Publications两种方式,这也是wiki上比较推荐的方式。

源码地址。本文涉及到的nicelogger项目Github地址:https://github.com/zhangliangnbu/nice-logger


准备工作

参考上一篇文章,如果已经做了,可以跳过。默认你已经有了一个本地项目,已经创建了Bintray平台账号和Maven仓库。

定义参数

  • Bintray平台仓库名称。android
  • Bintray平台Package名称。nicelogger
  • POM文件groupIdcom.liang.android
  • POM文件artifactIdnicelogger
  • POM文件version。取0.0.6

准备本地项目。有的话就不用创建。

配置Bintray平台。创建package,如果已经有了就不用创建了。


使用Publications方式发布项目

插件仓库配置

根据wiki上的说明,Gradle >= 2.1之后就可以不用单独配置插件仓库路径了,估计是已经包含在JCenter仓库里,我使用的是Gradle 4.6,也不用单独配置插件仓库路径。

参数配置

主要包括三个部分:Bintray平台参数配置、POM和构件文件参数配置、构件文件生成配置。

单独用一个文件gradleBintrayPluginPublicationsUpload.gradle维护这些配置,然后在module的build.gradle中引用。

项目build.gradle文件末尾添加:

apply from: './gradleBintrayPluginPublicationsUpload.gradle'

gradleBintrayPluginPublicationsUpload.gradle配置如下:

// 插件。无需另外单独配置插件仓库地址
apply plugin: 'maven-publish'
apply plugin: 'com.jfrog.bintray'

// 定义参数
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里设置
    key = properties.getProperty("bintray.apikey") // local.properties里设置
    publications = ['MyPublication'] // 'MyPublication'与下面的publishing闭包里的名称对应
    publish = true // 上传后立即发布到Bintray平台
    pkg {
        repo = "android"  // 必填。bintray平台仓库名,必须已经创建过。
        name = "nicelogger"  // 必填。仓库里包package的名称,没有的话会自动创建。
        licenses = ["Apache-2.0"] // 首次创建package则必须,否则选填。
        vcsUrl = gitUrl // 首次创建package则必须,否则选填。
        version {
            name = "$versionDefined"
        }
    }
}


// 构件文件和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构件
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
}

注释里已经有说明了,补充几点如下:

  • bintray平台信息配置。userkey是自己的私有参数,写在本地local.properties文件中。
  • 先要生成构件文件,之后才能上传。

发布

执行命令./gradlew clean build bintrayUpload,即可发布项目到Bintray平台,然后一键发布到JCenter。


使用Configurations方式发布项目

插件仓库配置

这种方式需要用到android-maven-gradle-plugin。在工程根目录build.gradle中添加仓库路径:

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

参数配置

主要包括三个部分:Bintray平台参数配置、POM和构件文件参数配置、构件文件生成配置。

单独用一个文件gradleBintrayConfigurationsUpload.gradle维护这些配置,然后在module的build.gradle中引用。

项目build.gradle文件末尾添加:

apply from: './gradleBintrayConfigurationsUpload.gradle'

gradleBintrayConfigurationsUpload.gradle配置如下:

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

// 定义参数
def gitUrl = 'https://github.com/zhangliangnbu/nice-logger.git'   // Git仓库的url
def groupIdDefined = "com.liang.android"
def artifactIdDefined = "nicelogger"
def versionDefined = "0.0.7"

// 待发布项目的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里设置
    key = properties.getProperty("bintray.apikey") // local.properties里设置
    configurations = ['archives']
    publish = true
    pkg {
        repo = "android"  // 必填。bintray平台仓库名,必须已经创建过。
        name = "nicelogger"  // 必填。仓库里包package的名称,没有的话会自动创建。
        licenses = ["Apache-2.0"] // 首次创建package则必须,否则选填。
        vcsUrl = gitUrl // 首次创建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
}

// 执行 ./gradlew clean bintrayUpload

补充说明如下:

  • android-maven-gradle-plugin的wiki上说需要在settings.gradle里配置artifactId,但我没有配置也发布成功了。
  • 不需要单独执行构件生成任务,应该是在bintrayUpload中已经做了处理。

发布

执行命令./gradlew clean bintrayUpload,即可发布项目到Bintray平台,然后一键发布到JCenter。


小结

是不是感觉使用官方插件挺繁琐的?我的配置是非常精简的,选填的参数几乎没有填,看官方示例,配置真是繁琐。

到目前为止,已经介绍了三种发布项目到JCenter的方式,推荐使用BintrayRelease方式,配置简洁、易于维护。


参考

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

注:文章首发简书和我的个人博客永恒的码流


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 前言 发布项目的定义。发布项目到远程JCenter仓库,准确的说是发布项目构件到JCenter仓库,用英语说是Pu...
    十思叶阅读 1,318评论 0 1
  • 前言 本文主要说明如何生成项目构件,并手动上传构件文件到Bintray平台,最后发布到JCenter仓库这一流程。...
    十思叶阅读 1,672评论 1 6
  • 前言 使用Gradle插件上传Android项目到Bintray平台是目前通用的做法,很方便。目前常用的Gradl...
    十思叶阅读 1,858评论 0 3
  • 喜欢裹在被窝里,回想整一天发生的事,这是我快速入睡的秘诀。什么重要的事情也没做,便越发觉得自己无能,惰性开...
    所罗门宝藏_490e阅读 232评论 0 0
  • 秋风抚柳叶落如沙,秋夜月明老树寒鸦。秋季已至,就连草丛里蟋蟀的叫声都有一种凄凉的感觉,就好像它知道秋天来了自己...
    谷战阅读 278评论 0 3