前言
本文介紹如何使用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文件
groupId
。com.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平臺信息配置队询。
user
和key
是自己的私有參數(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ù)缚窿。