AS上傳Library到JCenter 教程+踩坑記錄

風清袖一發表於2018-08-23

本文使用'com.novoda:bintray-release作為上傳外掛,下面以我個人的utils library上傳為例進行說明:

註冊bintray賬號

網址:bintray.com/signup/oss

注:可通過GithubGoogleTwitter授權bintray實現註冊

建立bintray倉庫

網址:bintray.com/profile/edi…

操作步驟:

  1. 點選左側“Repositories”選項,
  2. 點選該選項右側“New Repository”按鈕,
  3. 填寫Name選項框的值為“maven”,
  4. 選擇Type選項框的值為“Maven”,
  5. 點選“Create”按鈕。

注意:Name選項框的值maven必須是小寫。

配置gradle引數

配置gradle-wrapper.properties

#Sun May 21 20:41:27 CST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip //非此版本號可能會存在`Could not generate a proxy class for class com.android.build.gradle.tasks.BuildArtifactReportTask.`此類錯誤
複製程式碼

配置Project的build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0' //非此版本號可能會存在`Could not generate a proxy class for class com.android.build.gradle.tasks.BuildArtifactReportTask.`此類錯誤

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        
        classpath 'com.novoda:bintray-release:+' // 新增
    }
}

allprojects {
    repositories {
        jcenter()
    }
    tasks.withType(Javadoc) { // 新增
        options.addStringOption('Xdoclint:none', '-quiet')
        options.addStringOption('encoding', 'UTF-8')
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}
複製程式碼

配置Library專案的build.gradle

apply plugin: 'com.android.library'
apply plugin: 'com.novoda.bintray-release' // 新增

android {
    ...
    lintOptions { // 新增
        abortOnError false
    }
}

dependencies {
    ...
}

publish { // 新增
    userOrg = 'fqxyi' // 註冊bintray時的username
    groupId = 'com.fqxyi' // 專案包名
    artifactId = 'utils' // 專案名
    publishVersion = '1.0.0' // 釋出版本號
    desc = 'Summarize the tools or methods commonly used in routine development' // 專案描述,可選項
    website = 'https://github.com/fengqingxiuyi/AndroidUtils' // 專案站點,可選項
}
複製程式碼

配置其它Module的build.gradle

...

android {
    ...
    lintOptions { // 新增
        abortOnError false
    }
}

...
複製程式碼

執行上傳命令

命令:

gradlew clean build bintrayUpload -PbintrayUser=username -PbintrayKey=API Key -PdryRun=false
複製程式碼

命令解釋:

  1. PbintrayUser的值為註冊bintray時的username,
  2. PbintrayKey的值為bintray的Api Key,可從bintray.com/profile/edi…網址左側的API Key選項中得到,
  3. PdryRun是一個配置引數,當為true時,表示會執行所有環節,但不會上傳。

申請新增到JCenter

網址:bintray.com/username/ma…

注意:

  1. 網址中的username需要更換為註冊bintray時的username,
  2. 網址中的artifactId需要更換為專案名。

操作步驟:

  1. 點選右下角的“Add to jcenter”按鈕新增library package到jcenter,會跳轉到bintray.com/message/add…網址,
  2. 點選“Send”按鈕傳送請求。

檢測是否申請通過

訪問jcenter.bintray.com/groupId/art…網址,如果能看到以下四個檔案即表示申請通過:

artifactId-publishVersion-javadoc.jar
artifactId-publishVersion-sources.jar
artifactId-publishVersion.aar
artifactId-publishVersion.pom
複製程式碼

注意:網址中的groupId,預設是專案包名,在其成為網址的一部分後,需要將.符號改為/符號,例如:https://jcenter.bintray.com/com/fqxyi/utils/utils/1.0.0/

FAQ

Repo 'maven' was not found

問題:

* What went wrong:
Execution failed for task ':androidutilslibrary:bintrayUpload'.
        > Could not create package 'fqxyi/maven/androidutilslibrary': HTTP/1.1 404 Not Found [message:Repo 'maven' was not found]
複製程式碼

解決:未建立倉庫 或 倉庫名寫錯,注意maven是小寫

Lint檢查報錯

問題:Lint檢查報錯,導致Build & Upload失敗

解決:

方式一:需要自行根據錯誤資訊修正Error級別的問題,

方式二:為Library專案的build.gradle配置以下Lint選項實現,--該方式摘自網路,未驗證

android {

    ...

    lintOptions {
        abortOnError false // 即使有報錯也不會停止打包
        checkReleaseBuilds false // 打包Release版本的時候也不進行Lint檢測
    }
    
    ...
    
}
複製程式碼

網路問題導致的上傳失敗

問題:

* What went wrong:
Execution failed for task ':utils:bintrayUpload'.
> javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
複製程式碼
* What went wrong:
Execution failed for task ':utils:bintrayUpload'.
> org.apache.http.conn.HttpHostConnectException: Connection to http://127.0.0.1:8888 refused
複製程式碼
* What went wrong:
Execution failed for task ':utils:bintrayUpload'.
> org.apache.http.NoHttpResponseException: The target server failed to respond
複製程式碼

解決:

步驟1:關閉代理軟體,重啟網路;

步驟2:關閉由上傳操作自動開啟的Java客戶端(Mac上會出現,其他裝置不清楚)

上傳成功後jcenter專案首頁不顯示pom

問題:

上傳成功後jcenter專案首頁不顯示pom,點選add to jcenter彈出以下錯誤提示:

Please fix the following before submitting a JCenter inclusion request: - Add a POM file to the latest version of your package.
複製程式碼

是由於編碼問題導致javadoc生成失敗導致。

解決:

步驟1:在Project的build.gradle中配置以下語句:

...

allprojects {
    ...
    tasks.withType(Javadoc) { // 新增
        options.addStringOption('Xdoclint:none', '-quiet')
        options.addStringOption('encoding', 'UTF-8')
    }
}

...
複製程式碼

步驟2:拆分上傳命令:

1、在Terminal執行gradlew clean build命令。

2、先右擊執行generatePomFileForReleasePublication task,再右擊執行publishReleasePublicationToMavenLocal task,具體操作看圖:

Gradle projects

4、在Terminal中執行gradlew bintrayUpload -PbintrayUser=username -PbintrayKey=API Key -PdryRun=false命令

相關文章