使用Gradle釋出SNAPSHOT版本到JCenter(oss.jfrog.org)
本文原創。
轉載請註明CSDN部落格出處:
http://blog.csdn.net/maosidiaoxian/article/details/47608573
在以前我發過一篇 使用Gradle釋出Android開源專案到JCenter ,但隨後釋出SNAPSHOT版本卻折騰了好久沒弄出來,而昨晚在參考了兩篇部落格後終於成功。
回顧歷史
在釋出 aar 到JCenter的時候,一開始指定上傳檔案的時候是使用publications
,然後使用bundleRelease
任務的輸出做為aar的artifact。
publishing {
publications {
mavenJava(MavenPublication) {
artifactId PROJ_ARTIFACTID
artifact javadocJar
artifact sourcesJar
artifact bundleRelease
//省略
}
}
}
bintray {
user = BINTRAY_USER
key = BINTRAY_KEY
publications = [`mavenJava`]
// 省略
}
但是在當時卻導致了Android Studio裡編譯失敗,理由是沒有bundleRelease
這個屬性(或任務)。其原因是,這個任務一開始的時候是沒有的,是在分析計算了build.gradle之後才建立的。
後來找到了一個迂迴的方法,那就是使用artifacts
方法來把原始碼和註釋的jar包新增到artifact
中,然後上傳的時候publications
和configurations
一起用。如下:
artifacts {
archives javadocJar
archives sourcesJar
}
publishing {
publications {
mavenJava(MavenPublication) {
artifactId PROJ_ARTIFACTID
// 省略
}
}
bintray {
user = BINTRAY_USER
key = BINTRAY_KEY
configurations = [`archives`]
publications = [`mavenJava`]
//省略
}
釋出SNAPSHOT版本的問題
首先參考了這篇部落格,知道如何傳上SNAPSHOT版本到oss.jfrog.org(JCenter是不支援SNAPSHOT版本的)。但是這裡卻只能用publications
而不像bintray那樣有configurations
。
artifactory {
contextUrl = `http://oss.jfrog.org/artifactory`
resolve {
repository {
repoKey = `libs-release`
}
}
publish {
repository {
repoKey = `oss-snapshot-local` //The Artifactory repository key to publish to
username = bintray.user
password = bintray.key
maven = true
}
defaults {
//這裡的名字和上面紅色的名字一致即可,會將其包含的輸出上傳到jfrog上去
publications(`mavenJava`)
publishArtifacts = true
}
}
}
解決問題
於是只能再次面對以前那個問題,那就是怎麼解決打包輸出aar並加到mavenJava
的配置中。先是找到一個github上的issue,老外用指定的檔案路徑來新增。stackoverflow上也有不少類似的答案。但這並不是我想要的,因為這樣的指定並不靈活,而且也沒有對打包aar的任務形成依賴,所以最後還是迴歸到如何解決在配置中新增bundleRelease
的問題上。google之後,終於在小日本的這篇部落格找到答案:
afterEvaluate {
publishing.publications.aar.artifact(bundleRelease)
publishing.publications.jar.artifact(packageReleaseJar)
}
即,使用afterEvaluate
,在這裡的閉包中進行新增。因為在這個時候,已經有bundleRelease
這個任務了。
完整指令碼
完整指令碼如下:
group = PROJ_GROUP
version = PROJ_VERSION
project.archivesBaseName = PROJ_ARTIFACTID
apply plugin: `com.jfrog.bintray`
apply plugin: "com.jfrog.artifactory"
apply plugin: `maven-publish`
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = `sources`
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += configurations.compile
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = `javadoc`
from javadoc.destinationDir
}
javadoc {
options{
encoding "UTF-8"
charSet `UTF-8`
author true
version true
links "http://docs.oracle.com/javase/7/docs/api"
title PROJ_ARTIFACTID
}
}
def pomConfig = {
licenses {
license {
name "The Apache Software License, Version 2.0"
url "http://www.apache.org/licenses/LICENSE-2.0.txt"
distribution "repo"
}
}
developers {
developer {
id DEVELOPER_ID
name DEVELOPER_NAME
email DEVELOPER_EMAIL
}
}
}
publishing {
publications {
mavenJava(MavenPublication) {
artifactId PROJ_ARTIFACTID
artifact javadocJar
artifact sourcesJar
pom{
packaging `aar`
}
pom.withXml {
def root = asNode()
root.appendNode(`description`, PROJ_DESCRIPTION)
root.children().last() + pomConfig
}
}
}
}
afterEvaluate {
publishing.publications.mavenJava.artifact(bundleRelease)
}
bintray {
user = hasProperty("bintrayUser")?getProperty("bintrayUser"):getProperty("BINTRAY_USER")
key = hasProperty("bintrayKey")?getProperty("bintrayKey"):getProperty("BINTRAY_KEY")
publications = [`mavenJava`]
publish = true
pkg {
repo = `maven`
name = PROJ_NAME
desc = PROJ_DESCRIPTION
websiteUrl = PROJ_WEBSITEURL
issueTrackerUrl = PROJ_ISSUETRACKERURL
vcsUrl = PROJ_VCSURL
licenses = [`Apache-2.0`]
publicDownloadNumbers = true
}
}
artifactory {
contextUrl = `http://oss.jfrog.org/artifactory`
resolve {
repository {
repoKey = `libs-release`
}
}
publish {
repository {
repoKey = `oss-snapshot-local` //The Artifactory repository key to publish to
username = bintray.user
password = bintray.key
maven = true
}
defaults {
//這裡的名字和上面紅色的名字一致即可,會將其包含的輸出上傳到jfrog上去
publications(`mavenJava`)
publishArtifacts = true
}
}
}
使用方法
使用方法與之前的一樣,這裡不多贅述。稍有區別的是,在build.gradle中需要新增多一個依賴:
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:3.1.1"
這裡可以參考gradle-publish專案上的build.gradle檔案。
還有,釋出SNAPSHOT版本的時候,在配置裡的版本名稱應該是xxx.xxx.xxx-SNAPSHOT,執行gradle artifactoryPublish
就可以釋出上去了。如果要使用,需要宣告以下倉庫:
maven { url "http://oss.jfrog.org/oss-snapshot-local/" }
另外就是建議把bintray.gradle檔案拷到專案中使用。
如果使用過程有問題,歡迎在我的專案中提issue。
相關文章
- 利用Gradle釋出專案到JCenter、MavenGradleMaven
- Android擴充系列(12)--使用Gradle釋出aar專案到JCenter倉庫AndroidGradle
- Android通過Gradle釋出開源專案到binary/JcenterAndroidGradle
- 釋出Android Library專案到JCenterAndroid
- 新版Bintray網站釋出Library到JCenter網站
- 如何通過Gradle上傳Android庫到JCenterGradleAndroid
- 【Android AAR】快速釋出 Android Library 專案到 JCenterAndroid
- 使用gradle外掛釋出專案到nexus中央倉庫Gradle
- Android開源專案釋出jCenterAndroid
- 教你一步步釋出一個開源庫到 JCenter
- 使用Gradle釋出工件到Maven倉庫GradleMaven
- Gradle實戰:釋出aar包到maven倉庫GradleMaven
- Griffon and Gradle 1.0釋出Gradle
- 手把手教你釋出自己的開源庫到 Jcenter
- 上傳自己的庫到jcenter
- Gradle 5.0 正式版本釋出,一大波新特性來襲Gradle
- Android 上傳 Library 到 JCenterAndroid
- jQuery 釋出 3.4.0 版本jQuery
- Gitea 釋出 1.0.1 版本Git
- 理解Maven中的SNAPSHOT版本和正式版本Maven
- Android 專案打包到 JCenter 的坑Android
- Oracle 12.1.0.2.0 版本釋出Oracle
- SOA新版本釋出
- [版本釋出]ThinkOX V1正式版釋出【版本號V1.0.2】
- Gradle入門系列(4):建立二進位制釋出版本Gradle
- Nacos 釋出 1.0.0 GA 版本,可大規模投入到生產環境
- 釋出aar到GithubGithub
- Apache Doris 1.2.4 Release 版本正式釋出|版本通告Apache
- Spark版本釋出歷史,及其各版本特性Spark
- Swoftcli: 釋出 v0.1.5 版本
- HMS Core 6.3.0 版本釋出公告
- openGauss 2.0.0 版本正式釋出
- FlutterBoost3.0釋出preview版本FlutterView
- Apache Doris 2.0.3 版本正式釋出Apache
- Apache APISIX 3.1.0 版本正式釋出ApacheAPI
- BabaSSL 8.3.1 釋出穩定版本
- Apache Doris 2.0.4 版本正式釋出Apache
- beego 1.7.1 新版本釋出Go