作者個人網(wǎng)站:http://www.harddone.com
紙上得來終覺淺。
一直以為發(fā)布AAR到j(luò)center是非常簡單的事被因,跟發(fā)布到私有服務(wù)器nexus應(yīng)該沒太多差別。沒想到自己動手做過才知道千萬道坑罕伯。
本文將記錄在Android Studio 3.3.2下乾吻,如何上傳用kotlin開發(fā)的aar到j(luò)center服務(wù)器以及遇到的問題灵疮。參考來自這篇博文织阅,寫的非常好,詳細(xì)的介紹了許多的基本概念和發(fā)布步驟始藕。
一蒲稳、 注冊Jcenter 個人賬號
這里請注意,Bintray官網(wǎng)伍派,請選擇“For an Open Source Account”注冊賬號江耀。
二、創(chuàng)建Repository和Package
以本次測試的工程為例诉植,我想在Jcenter上發(fā)布一個測試的Android SDK, 自定義命名為LazySDK, 該SDK下目前只包含一個Sub-SDK包:customviews, 該包主要是封裝一些日常項(xiàng)目中常用的view祥国。所以我可以在Bintray先創(chuàng)建一個倉庫命名為LazySDK,然后在倉庫中再創(chuàng)建一個包為customviews.
第一步:創(chuàng)建Reprository:
第二部:創(chuàng)建Package
進(jìn)入第一步創(chuàng)建的倉庫“LazySDK",新建Package,然后填寫Package name等基本信息后保存:
三舌稀、配置Android Studio工程
在準(zhǔn)備配置之前,請先確保工程沒有錯誤灼擂。以本次測試為例:本地創(chuàng)建了一個LazySDK的工程壁查,Kotlin為開發(fā)語言,工程中依賴Module:customviews.
第一步:配置upload腳本
(1)在project build.gradle文件中配置dependencies:
dependencies {
classpath 'com.android.tools.build:gradle:3.3.2'
? ? classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
? ? classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4'
? ? classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
? ? classpath 'org.jetbrains.dokka:dokka-android-gradle-plugin:0.9.18'
}
(2)在project目錄下創(chuàng)建:??jcenter_push.gradle
(3)在library moudle builde.gradle中引用 jcenter_push.gradle, 首先在ext中配置?jcenter_push.gradle需要用到的變量值剔应,這個樣做的目的是如果以后工程依賴多個module的時候睡腿,先在各自的build.gradle中定義跟自己相關(guān)的倉庫名稱等信息,然后共用一個jcenter_push.gradle. (未驗(yàn)證)
ext {
bintrayRepo ='LazySDK'
? ? bintrayName ='customviews'
? ? publishedGroupId ='com.lazy.sdk'
? ? libraryName ='customviews'
? ? artifact ='customviews'
? ? libraryDescription ='Custom vies on Android'
? ? siteUrl ='https://github.com/LazyBonesLZ/LazySDK.git'
? ? gitUrl ='https://github.com/LazyBonesLZ/LazySDK.git'
? ? libraryVersion ='0.0.1'
? ? developerId ='lazyboneslz'
? ? developerName ='TJL'
? ? developerEmail ='lazybonestjl@gmail.com'
? ? licenseName ='The Apache Software License, Version 2.0'
? ? licenseUrl ='http://www.apache.org/licenses/LICENSE-2.0.txt'
? ? allLicenses = ["Apache-2.0"]
}
apply from: '../jcenter_push.gradle'
四峻贮、install & upload
(1)執(zhí)行./gradlew install, 驗(yàn)證是否有問題席怪,如果一切順利,你會看到 Build Successful
? (2) 然后執(zhí)行: ./gradlew bintrayUpload纤控,如果一切順利挂捻,你會看到 Build Successful
五、Add to Jcenter
到目前為止船万,上傳的SDK還沒有正式發(fā)布到Jcenter刻撒,只在你自己的Bintray的Maven倉庫。你可以在project 的build.gradle中指定repository url來使用耿导。
repositories {
? ? ?maven{
? ? ? ? url 'https://dl.bintray.com/lazyboneslz/LazySDK/'
? ? ? }
? ? ? ? google()
? ? ? ? jcenter()
}
然后在app build.gradle田間dependencies
implementation com.lazy.sdk:customviews:0.0.1'
這種通過配置repository url來引用的方式声怔,不是最好的方式,我們不可能有10個倉庫碎节,就配置10個URL吧捧搞? 所以抵卫,需要把sdk發(fā)送到Jcenter服務(wù)器狮荔,這樣我們就可以不用配置自定義的repository url了胎撇。
?然后直接點(diǎn)擊“Send",不用填寫任何信息都可以殖氏。
然后就等JCenter 審核晚树,一般需要幾個小時。我是頭一天12點(diǎn)左右發(fā)送的雅采,但是等了一下午都沒看到通過爵憎。第二天上班發(fā)現(xiàn)已經(jīng)通過了,可以不配置自定義的repository url 直接引用JCenter所上傳 SDK婚瓜。
六、Github源碼
七巴刻、備注
本次測試并沒有按照所參考的博文那樣愚铡,自動將內(nèi)容同步到maven central , 所以并未配置GPG相關(guān)的信息。
=========================================>
八胡陪、遇到的問題
1. Javadoc generation failed. Generated Javadoc options file (useful for troubleshooting): 'xxx/javadoc/javadoc.options':
本項(xiàng)目是kotlin開發(fā)沥寥,在配置中如下配置:
(1) 在project build.gradle文件中配置dependencies:
dependencies {
? ?........
? ? classpath 'org.jetbrains.dokka:dokka-android-gradle-plugin:0.9.18'
}
(2) 在jcenter_push.gradle中加入:
if (project.hasProperty("kotlin")) {//Kotlin libraries
? ? task sourcesJar(type: Jar) {
? ? ? ?classifier ='sources'
? ? ? ? from android.sourceSets.main.java.srcDirs
}
task javadoc(type: Javadoc,dependsOn: dokka) {
}
}else if (project.hasProperty("android")) {// Android libraries
? ? task sourcesJar(type: Jar) {
classifier ='sources'
? ? ? ? from android.sourceSets.main.java.srcDirs
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath +=project.files(android.getBootClasspath().join(File.pathSeparator))
}
}else {// Java libraries
? ? task sourcesJar(type: Jar,dependsOn: classes) {
classifier ='sources'
? ? ? ? fromsourceSets.main.allSource
? ? }
}
//解決kotlin javadoc.options抱錯
dokka {
outputFormat ='html'
? ? outputDirectory ="$buildDir/javadoc"
}
2 . Unable to upload files: Maven group, artifact or version defined in the pom file do not match the file path 'xx/xxxxx.pom'
這個錯誤困擾了我很久,在網(wǎng)上都各種research柠座,發(fā)現(xiàn)大多都是說工程中的module名稱必須和artifactid一致邑雅,我按照提示改成一致以后問題依然存在,百思不得琪姐妈经。最后去https://github.com/bintray/gradle-bintray-plugin查解釋淮野,也沒發(fā)現(xiàn)什么特別需要的注意的地方。后來仔細(xì)對比官方demo的gradle狂塘,發(fā)現(xiàn)它還聲明了group的值录煤,而我是參看博文中的腳本來做,卻沒有g(shù)roup的相關(guān)聲明荞胡,最后加上去妈踊,完美上傳。
version = libraryVersion
//important, if null, will issue: Maven group, artifact or version not match ...
group = publishedGroupId
3. JCenter審核通過前泪漂,配置repository url引用sdk失敗廊营,原因是配置的URL錯誤,不能直接拷貝Bintray的倉庫地址
? ? maven{
? ? ? ?url 'https://bintray.com/lazyboneslz/LazySDK/customviews'
? ? }
正確的地址是:
maven{
? ? ? ?url 'https://dl.bintray.com/lazyboneslz/LazySDK/customviews'
? ? }