將aar發佈到Jcenter倉庫遇到的問題及解決方案

前言

有一段時間沒有寫博客了,最近生活的事情比較多,忙來忙去的,等閒下來時發現自己有些懶惰了,生活還要繼續,要繼續努力,加油~
最近公司想把封裝好的庫放到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
    }
}

這幾個字段分別替換爲下圖中各個字段

jcenter1


這裏寫圖片描述


問題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這三步可以分步執行.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章