一步一步教你將開源項目上傳到jcenter

註冊與上傳 JCcenter

寫得比較清楚的文章,我直接引用過來了,感謝開源,我就不重複造輪子了。直接貼鏈接,感謝原作者。

  1. 一步一步教你將開源項目上傳到jcenter(第一種方式)
  2. 一步一步教你將開源項目上傳到jcenter(第二種方式)

特別說明,我使用的是第一種方式完成了註冊和相關設置選項。根據文中的方式操作,一步一步來,問題不大。可能需要特別注意的是配置文件的編寫。這裏我貼一份配置文件 build.gradle 的編寫方式。可供參考。

配置文檔備份

在線上傳配置備份

//從這裏開始配置

//添加這兩行
apply plugin: 'com.github.dcendents.android-maven'
apply plugin: 'com.jfrog.bintray'

//項目主頁--項目的GitHub地址
def siteUrl = 'https://github.com/hgncxzy/keyboard'
//項目的git地址
def gitUrl = 'https://github.com/hgncxzy/keyboard.git'

//發佈到JCenter上的項目名字,compile引用時的第2部分項目名
def libName = "keyboard"
//compile引用時的第1部分
group = "com.xzy.util"
// 版本號,//compile引用時的最後部分項目名,下次更新是隻需要更改版本號即可
version = "1.0.0"
//上面配置後上傳至JCenter後的編譯路徑是這樣的: compile 'com.xzy.util:keyboard:1.0.0'

//生成源文件
task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

//生成Javadoc文檔
//task javadoc(type: Javadoc) {
//    source = android.sourceSets.main.java.srcDirs
//    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
//}

//文檔打包成jar
//task javadocJar(type: Jar, dependsOn: javadoc) {
//    classifier = 'javadoc'
//    from javadoc.destinationDir
//}

//拷貝javadoc文件
//task copyDoc(type: Copy) {
//    from "${buildDir}/docs/"
//    into "docs"
//}

//上傳到JCenter所需要的源碼文件
artifacts {
//    archives javadocJar
    archives sourcesJar
}

// 配置maven庫,生成POM.xml文件
install {
    repositories.mavenInstaller {
        // This generates POM.xml with proper parameters
        pom {
            project {
                packaging 'aar'
                //項目描述,自由填寫
                name 'Keyboard on Android'
                url siteUrl
                licenses {
                    license {
                        //開源協議
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
                developers {
                    developer {
                        //開發者的個人信息,根據個人信息填寫
                        id 'hgncxzy'
                        name 'arthinking'
                        email '[email protected]'
                    }
                }
                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }
        }
    }
}

//上傳到JCenter
Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

bintray {
    user = properties.getProperty("bintray.user")    //讀取 local.properties 文件裏面的 bintray.user
    key = properties.getProperty("bintray.apikey")   //讀取 local.properties 文件裏面的 bintray.apikey
    configurations = ['archives']
    pkg {
        //這裏的repo值必須要和你創建Maven倉庫的時候的名字一樣,我們前面創建的就是maven
        repo = "maven"
        //發佈到JCenter上的項目名字
        name = libName
        //項目描述
        desc = 'Keyboard on Android'
        websiteUrl = siteUrl
        vcsUrl = gitUrl
        licenses = ["Apache-2.0"]
        publish = true
    }
}

//javadoc {
//    options {
//        //如果你的項目裏面有中文註釋的話,必須將格式設置爲UTF-8,不然會出現亂碼
//        encoding "UTF-8"
//        charSet 'UTF-8'
//        author true
//        version true
//        links "http://docs.oracle.com/javase/7/docs/api"
//    }
//}

可以將整個配置複製到需要上傳的 module 的 build.gradle 文件中,在對應的地方做修改就可以。然後分別執行如下命令:

gradlew install
gradlew bintrayUpload

本地打包 arr ,生成 pom 文檔再上傳方式(推薦)

我在執行 gradlew bintrayUpload 的時候,卡在 99%,很多次都是失敗,報的是連接超時錯誤。最後,去 JCcenter 查看,只有源碼的 jar 包上傳上來了,缺少 aar 和 pom 文件。試了很多次,都是失敗的。於是使用本地打包再上傳的方式執行。

/從這裏開始配置

// 配置完成後,執行 gradlew generateRelease 在本地生成所需的文件,build/release 文件夾中
// 將 com 文件夾以下打包成 zip 包,然後在 jcenter 創建新的版本,並上傳該 zip 到新創建的版本
//應用插件 maven
apply plugin: 'maven'

//聲明你的包名
def groupId = 'com.xzy.util'
//聲明模塊名稱
def artifactId = 'keyboard'
//要發佈的版本號
def version = '1.0.2'

def localReleaseDest = "${buildDir}/release/${version}"

task androidJavadocs(type: Javadoc) {
    failOnError = false
    source = android.sourceSets.main.java.srcDirs
    ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
    classpath += files(ext.androidJar)
}

task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) {
    classifier = 'javadoc'
    from androidJavadocs.destinationDir
}

task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}
//Maven本地倉庫構建
uploadArchives {
    repositories.mavenDeployer {
        pom.groupId = groupId
        pom.artifactId = artifactId
        pom.version = version
        // Add other pom properties here if you want (developer details / licenses)
        repository(url: "file://${localReleaseDest}")
    }
}
//壓縮爲zip
task zipRelease(type: Zip) {
    from localReleaseDest
    destinationDir buildDir
    archiveName "release-${version}.zip"
}
//輸出到本地補錄,位於你的模塊中的build下
task generateRelease {
    doLast {
        println "Release ${version} can be found at ${localReleaseDest}/"
        //注意此處,Windows系統需要加入\\轉義符,Mac請去掉轉義符"\\"
        println "Release ${version} zipped can be found ${buildDir}\\release-${version}.zip"
    }
}

generateRelease.dependsOn(uploadArchives)
generateRelease.dependsOn(zipRelease)

artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}

具體步驟爲:

  1. 將以上模板複製到需要上傳的 module 的 build.gradle 中
  2. 修改對應的地方
  3. 配置完成後,執行 gradlew generateRelease
  4. 在本地生成所需的文件,並在 build/release 文件夾中可以得到這些文件,將 com 文件夾以下打包成 zip 包
  5. 然後在 jcenter 創建新的版本,並上傳該 com.zip 到新創建的版本,會自動解壓
  6. 等待加入 jcenter,加入後就可以引用了。

問題解決參考文檔

  1. AndroidStudio發佈項目到Bintray遇到的錯誤及解決

注意

  1. 如果項目是私有的,可能添加不成功
  2. 建議採用本地打包再上傳的方式,效率比較高。(實測體驗)

其他問題,請聯繫我 [email protected]

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