前言
有一段時間沒有寫博客了,最近生活的事情比較多,忙來忙去的,等閒下來時發現自己有些懶惰了,生活還要繼續,要繼續努力,加油~
最近公司想把封裝好的庫放到Jcenter中,方便使用,於是便研究了一下.過程還是比較曲折的,遇到了各種各樣的問題,遂記錄一下這些問題,希望能幫到之後遇到這些問題的同鞋.
遇到問題
1) 公司要在Jcenter中創建組織,在組織中統一管理庫文件.
2) 希望在Jcenter中隱藏源碼及文檔(在Jcenter中發佈aar需要xx-javadoc.jar 、xx-sources.jar 、xx.aar及xx.pom 缺一不可 ).
解決問題
關於如何將aar發佈到Jcenter倉庫的過程這裏就不寫了,網上有很多好的文章和教程,按照步驟來就可以.這裏主要記錄一下遇到的不好解決的問題.
問題1:
看了很多關於發佈aar到Jcenter倉庫的文章,大多數都是申請個人賬戶的,很少有提及組織的.其實很簡單,首先要成爲組織的成員,之後在build.gradle中的bintray部分填入userOrg字段.看一下下邊的配置,註釋的也很全.
bintray {
user = properties.getProperty("bintray.user")
key = properties.getProperty("bintray.apikey")
configurations = ['archives']
pkg {
userOrg= "your-orgNmae" // 組織名字
repo = "your-maven" // 倉庫名字
name = "your-libName" // 項目在JCenter的名字
websiteUrl = siteUrl
vcsUrl = gitUrl
licenses = ["Apache-2.0"]
publish = true
}
}
這幾個字段分別替換爲下圖中各個字段
問題2:
在Jcenter中發佈aar需要xx-javadoc.jar 、xx-sources.jar 、xx.aar及xx.pom這4個文件,缺一不可.源碼的部分在xx-sources.jar 中,文檔部分在xx-javadoc.jar中,需要解決的問題是隱藏源碼及文檔.在Jcenter中無法手動的去修改文件,所以上傳一個版本之後,只能去升級版本,無法去覆蓋修改(可能我沒有發現哈. - -!).先看一下生成sources.jar和javadoc.jar的部分
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
可以發現不管是生成sources.jar還是javadoc.jar都是通過android.sourceSets.main.java.srcDirs目錄來指定要生成的文件位置的(也就是anroid studio項目代碼根目錄,根據代碼來生成sources.jar 和javadoc.jar).那如果修改一下這個目錄,源碼和文檔會不會就不會生成了呢?帶着這個疑問去實踐一下,重新指定java.srcDirs的目錄,這裏是一個數組,可以指定多個.在項目的跟目錄下建一個空的目錄jcenter_src
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
.....
sourceSets {
main {
java.srcDirs = ['jcenter_src','src/main/java']
}
}
}
之後修改指定的目錄
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs[0]
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs[0]
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
修改指定的目錄爲android.sourceSets.main.java.srcDirs[0],也就是jcenter_src這個空文件夾,之後生成的sources.jar與javadoc.jar裏邊的內容就是空了.這樣也就達到了隱藏源碼及文檔的目的.
最後在Terminal中執行指令 ./gradlew clean build bintrayUpload 就可以了,當然clean,build,bintrayUpload這三步可以分步執行.