Android Studio如何發(fā)布項(xiàng)目到Maven倉庫

一般地將 Android Library 打包成 aar 文件后,需要發(fā)布到 Maven 倉庫中供他人使用,這里有兩種發(fā)布場(chǎng)景:

  • 個(gè)人開源項(xiàng)目,發(fā)布到 Maven Central 倉庫或 JCenter 倉庫;
  • 公司內(nèi)部使用,一般公司會(huì)搭建私有 Maven 倉庫(使用 nexus 搭建),把包發(fā)布到私有 Maven 倉庫。
方式一:使用Nexus搭建Maven私有倉庫

第一步:官網(wǎng)下載最新安裝包 nexus-3.7.1-02-mac,解壓后配置環(huán)境變量;
第二步:使用命令 nexus start 啟動(dòng)服務(wù)(nexus stop結(jié)束);
第三步:進(jìn)入 nexus 界面:http://127.0.0.1:8081/nexus(無法打開,換成自己的ip地址打開);
第四步:使用管理員用戶登錄(用戶名:admin,密碼:admin123);
第五步:找到左側(cè) Browser ,右側(cè)會(huì)展示不同形式的 maven 倉庫地址。

發(fā)布到Maven私有倉庫

第一步:編寫 maven upload 腳本 nexus-push.gradle 置于lib gradle文件同級(jí)目錄;

apply plugin: 'maven'

task androidJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

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

task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}

uploadArchives {
    repositories {
        mavenDeployer {
            // 這里倉庫地址可改成自己需要的
            repository(url: "http://127.0.0.1:8081/nexus/repository/maven-releases/") {
                // 這里的用戶名和密碼需要寫在local.properties
                authentication(userName: "deployment", password: "deployment123")
            }

            pom.groupId = 'com.coral.banner'
            pom.artifactId = 'bannerwrapperview'
            pom.version = '0.0.1'

            pom.project {
                licenses {
                    license {
                        name 'The Apache Software License, Version 2.0'
                        url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
                    }
                }
            }
        }
    }
}

// 上傳到內(nèi)部私服maven倉庫(nexus搭建)命令:gradle uploadArchives

第二步:在 library 目錄下的 build.gradle 文件末尾添加上述maven腳本引用(Tips:添加到頂部會(huì)因?yàn)?compileSakVersion無法編譯);

......
apply from: './nexus-push.gradle'

第三步:命令行鍵入命令 gradle uploadArchives,開始打包上傳,build successful 后,到 nexus 頁面,找到腳本中 repository 定義的 url http://127.0.0.1:8081/nexus/repository/maven-releases/,點(diǎn)擊 browser -> maven-release,可以看到已發(fā)布的項(xiàng)目;

nexus maven upload.png

第四步:內(nèi)部項(xiàng)目引入配置;

// 1. 項(xiàng)目根gradle文件添加 maven 倉庫地址
allprojects {
    repositories {
        jcenter()

        // 1. 發(fā)布到本地nexus私服
        maven {
            url "http://電腦IP:8081/nexus/repository/maven-releases/"
        }
    }
}

// 2. app 或者其他需要引入的項(xiàng)目 gradle 文件中添加依賴:
compile 'com.coral.banner:bannerwrapperview:0.0.1'

方式二:發(fā)布到JCenter倉庫

第一步:注冊(cè) bintray 賬戶并在用戶中心獲取用戶名和Api key(Tips:必須使用 gmail 賬戶注冊(cè),另外在注冊(cè)時(shí)注意注冊(cè)個(gè)人賬號(hào),organization賬戶需付費(fèi)免費(fèi)使用30天,若不小心注冊(cè)成組織賬戶,重新開gmail賬戶注冊(cè));

第二步:到 https://bintray.com 網(wǎng)站 Add New Repository 創(chuàng)建新倉庫,一般選擇 type 為 Maven;

第三步: 選擇新建的 Maven 倉庫,Add New Package,
輸入稍后要 upload 的項(xiàng)目 git 地址和描述信息;

第四步:New Version 添加版本號(hào);

第五步:在需要發(fā)布的 module 下添加 jcenter-push.gradle 文件配置發(fā)布信息;

apply plugin: 'com.jfrog.bintray'
apply plugin: 'com.github.dcendents.android-maven'

def siteUrl = 'https://github.com/CoralXss/CommonBannerView'
def gitUrl = 'https://github.com/CoralXss/CommonBannerView.git'

group = 'com.coral.banner'
version = '1.0.0'

install {
    repositories.mavenInstaller {
        pom {
            project {
                packaging 'aar'
                groupId 'com.coral.banner'
                artifactId 'bannerwrapperview'

                // Add your description here
                name 'banner'
                description 'custom common bannerview for 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 '用戶名'
                        name '用戶名'
                        email '你的@gmail.com'
                    }
                }

                scm {
                    connection gitUrl
                    developerConnection gitUrl
                    url siteUrl
                }
            }

        }
    }
}

task androidJavadocs(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

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

task androidSourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

artifacts {
    archives androidSourcesJar
    archives androidJavadocsJar
}

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())

bintray {
    // local.property 文件下配置bintray用戶名和apiKey
    user = properties.getProperty("bintray.user")
    key = properties.getProperty("bintray.apikey")
    configurations = ['archives']
    pkg {
        version {
            name = libVersion
            desc = 'custom common bannerview'
        }
        repo = 'maven'
        name = 'CommonBannerView'
        licenses = ['Apache-2.0']
        vcsUrl = gitUrl
        publish = true
    }
}

// 上傳到 jcenter : gradle bintrayUpload

第五步:在根目錄 gradle 文件中添加 bintray 發(fā)布項(xiàng)目插件配置:

dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        
        classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7.3'
    }

第六步:在 library 目錄下的 build.gradle 文件末尾添加上述maven腳本引用;

......
apply from: './jcenter-push.gradle'

第七步:終端依次執(zhí)行以下命令將項(xiàng)目發(fā)布到 bintray 下 maven 倉庫;

./gradlew install
./gradlew bintrayUpload

第八步:build 成功后,刷新網(wǎng)頁,可以看到項(xiàng)目上傳到 maven 倉庫,并且生成配置信息:

<dependency>
  <groupId>com.coral.banner</groupId>
  <artifactId>bannerwrapperview</artifactId>
  <version>1.0.0</version>
  <type>pom</type>
</dependency>

第九步:將 bintray 下的 maven 倉庫 include 到 JCenter 倉庫,點(diǎn)擊右側(cè) Add to JCenter 按鈕,填上 message 信息,最后send。之后就是等待人工審核結(jié)果,審核通過會(huì)收到站內(nèi)消息。

通過后根據(jù)配置信息,可在項(xiàng)目中進(jìn)行引用。編譯時(shí),gradle會(huì)自動(dòng)從 JCenter 倉庫下載對(duì)應(yīng)的依賴包到本地項(xiàng)目中。引用形式如下:

compile 'com.coral.banner:bannerwrapperview:1.0.0'

Tips:這里在上傳時(shí)可能存在 http/1.1 401 unauthorized 問題

  • 原因之一,local.property 文件中配置的賬號(hào)和apikey信息錯(cuò)誤;
  • 原因之二,個(gè)人猜測(cè)是 .gradle 中的配置同 bintray對(duì)應(yīng)倉庫信息配置不一致導(dǎo)致上傳失敗。

參考:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容