前言 本文介绍如何使用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文件groupId
。com.liang.android
。
POM文件artifactId
。nicelogger
。
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
文件末尾添加:
1 apply from: './gradleBintrayPluginPublicationsUpload.gradle'
gradleBintrayPluginPublicationsUpload.gradle
配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 apply plugin: 'maven-publish' apply plugin: 'com.jfrog.bintray' def gitUrl = 'https://github.com/zhangliangnbu/nice-logger.git' def groupIdDefined = "com.liang.android" def artifactIdDefined = "nicelogger" def versionDefined = "0.0.5" Properties properties = new Properties() properties.load(project.rootProject.file('local.properties' ).newDataInputStream()) bintray { user = properties.getProperty("bintray.user" ) key = properties.getProperty("bintray.apikey" ) publications = ['MyPublication' ] publish = true pkg { repo = "android" name = "nicelogger" licenses = ["Apache-2.0" ] vcsUrl = gitUrl version { name = "$versionDefined" } } } 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' ) configurations.implementation.allDependencies.each { if (it.name != 'unspecified' ) { def dependencyNode = dependenciesNode.appendNode('dependency' ) dependencyNode.appendNode('groupId' , it.group) dependencyNode.appendNode('artifactId' , it.name) dependencyNode.appendNode('version' , it.version) } } } } } } 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平台信息配置。user
和key
是自己的私有参数,写在本地local.properties
文件中。
先要生成构件文件,之后才能上传。
发布
执行命令./gradlew clean build bintrayUpload
,即可发布项目到Bintray平台,然后一键发布到JCenter。
使用Configurations方式发布项目 插件仓库配置
这种方式需要用到android-maven-gradle-plugin 。在工程根目录build.gradle
中添加仓库路径:
1 2 3 4 5 6 buildscript { dependencies { classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' } }
参数配置
主要包括三个部分:Bintray平台参数配置、POM和构件文件参数配置、构件文件生成配置。
单独用一个文件gradleBintrayConfigurationsUpload.gradle
维护这些配置,然后在module的build.gradle
中引用。
项目build.gradle
文件末尾添加:
1 apply from: './gradleBintrayConfigurationsUpload.gradle'
gradleBintrayConfigurationsUpload.gradle
配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 apply plugin: 'com.github.dcendents.android-maven' apply plugin: 'com.jfrog.bintray' def gitUrl = 'https://github.com/zhangliangnbu/nice-logger.git' def groupIdDefined = "com.liang.android" def artifactIdDefined = "nicelogger" def versionDefined = "0.0.7" group = "$groupIdDefined" version = "$versionDefined" Properties properties = new Properties() properties.load(project.rootProject.file('local.properties' ).newDataInputStream()) bintray { user = properties.getProperty("bintray.user" ) key = properties.getProperty("bintray.apikey" ) configurations = ['archives' ] publish = true pkg { repo = "android" name = "nicelogger" licenses = ["Apache-2.0" ] vcsUrl = gitUrl version { name = "$versionDefined" } } } 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' } } } } } 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
,即可发布项目到Bintray平台,然后一键发布到JCenter。
小结 是不是感觉使用官方插件挺繁琐的?我的配置是非常精简的,选填的参数几乎没有填,看官方示例,配置真是繁琐。
到目前为止,已经介绍了三种发布项目到JCenter的方式,推荐使用BintrayRelease方式,配置简洁、易于维护。
参考
gradle-bintray-plugin
gradle-bintray-plugin wiki
bintray-examples
android-maven-gradle-plugin