Android 打包上傳Maven庫

一.Maven私服搭建

  1. 下載nexus3
    地址:https://www.sonatype.com/download-oss-sonatype
    windows系統(tǒng):

  2. 修改配置
    解壓下載包到:F:\MavenCenter\nexus-3.15.2-01-win64
    修改文件位置:...\nexus-3.15.2-01\etc文件夾下nexus-default.properties
    修改主機(jī)和端口配置:

  3. 啟動(dòng)nexus服務(wù)
    ...\bin目錄下,以管理員身份啟動(dòng)cmd

    • 方式一:nexus.exe /run命令啟動(dòng)
      啟動(dòng)成功:
    • 方式二:安裝nexus本地服務(wù)來啟動(dòng)(推薦
      安裝命令:nexus.exe /install nexus3
      安裝成功:

      啟動(dòng)nexus服務(wù):nexus.exe /start nexus3
      啟動(dòng)nexus服務(wù):nexus.exe /stop nexus3

4.訪問nexus私服

二.nexus倉庫

倉庫名 作用
hosted(宿主倉庫) 存放本公司開發(fā)的版本(正式版本毒坛、測試版本)
proxy(代理倉庫) 代理中央倉庫怀各、Apache庫
group(組倉庫) 使用時(shí)連接組倉庫爽醋,包含Hosted(宿主倉庫)和Proxy(代理倉庫)
virtual (虛擬倉庫) 基本用不到齐莲,重點(diǎn)關(guān)注上面三個(gè)倉庫的使用

三.版本上傳

  1. 可以本地生成jar或者aar廷支,通過圖形化用戶界面上面



    這個(gè)沒啥可說明僧界,按照界面提示上傳就行

  2. 通過gradle命令上傳
    在Module的build.gradle 添加如下腳本

apply plugin: 'maven'
uploadArchives {
    repositories {
        mavenDeployer {
            pom.groupId = GROUP_ID
            pom.artifactId = ARTIFACT_ID
            pom.version = VERSION
            repository(url: RELEASE_REPOSITORY_URL) {
                authentication(userName: USERNAME, password: PASSWORD)
            }
        }
    }
}

然后執(zhí)行 gradlew uploadArchives任務(wù)上傳AAR

為了方便維護(hù)饲化,這里在Module目錄新建一個(gè)腳本push.gradle婚苹,然后將上傳Maven庫的腳本抽離到push.gradle哪痰,最后在build.gradle中通過apply from: push.gradle引入搀捷。
具體代碼如下:
push.gradle:

//支持將項(xiàng)目發(fā)布到maven倉庫的插件
apply plugin: 'maven'
//支持對庫文件數(shù)字簽名的插件茂装,可以通過簽名知道文件的創(chuàng)建者怎诫,創(chuàng)建時(shí)間等信息
apply plugin: 'signing'

//聲明變量記錄上傳Maven庫地址
def repositoryUrl
//判斷發(fā)到正式庫還是snapshot庫
if (isReleaseBuild()) {
    println 'Release Build'
    //上傳Release私有倉庫
    repositoryUrl = "http://127.0.0.1:8081/repository/maven-releases/"
} else {
    println 'Debug Build'
    //上傳snapshot私有倉庫
    repositoryUrl = "http://127.0.0.1:8081/repository/maven-snapshots/"
}

//從項(xiàng)目gradle.properties中讀取Nexus服務(wù)器登錄用戶名
def getRepositoryUserName() {
    return hasProperty('NEXUS_USERNAME') ? NEXUS_USERNAME : ""
}
//讀取Nexus服務(wù)器登錄密碼
def getRepositoryPassword() {
    return hasProperty('NEXUS_PASSWORD') ? NEXUS_PASSWORD : ""
}
//通過gradle.properties中VERSION_NAME常量判斷是否是Release版本
def isReleaseBuild() {
    return !VERSION_NAME.contains("SNAPSHOT")
}

//配置階段要結(jié)束伦籍,項(xiàng)目評估完會(huì)走到這一步
afterEvaluate { project ->
    //聲明上傳Maven的Task
    uploadArchives {
        repositories {
            mavenDeployer {
                //簽名POM
                beforeDeployment {
                    MavenDeployment deployment -> signing.signPom(deployment)
                }

                //構(gòu)件標(biāo)識符
                pom.artifactId = POM_ARTIFACT_ID
                //全球唯一標(biāo)識符
                pom.groupId = POM_GROUP_ID
                //構(gòu)件版本
                pom.version = VERSION_NAME

                //用戶名和密碼授權(quán)驗(yàn)證
                repository(url: repositoryUrl) {
                    authentication(userName: getRepositoryUserName(), password: getRepositoryPassword())
                }

                //配置pom.xml
                pom.project {
                    //庫名稱
                    name POM_NAME
                    //打包下載上傳的格式
                    packaging POM_PACKAGING
                    //描述信息
                    description POM_DESCRIPTION
                    //項(xiàng)目地址
                    url POM_URL
                    //scm(software configuration management)標(biāo)簽允許你配置你的代碼庫
                    //不用SCM可忽略蓝晒,隨意配置
                    scm {
                        url POM_SCM_URL
                        connection POM_SCM_CONNECTION
                        developerConnection POM_SCM_DEV_CONNECTION
                    }
                    //軟件許可證書信息
                    licenses {
                        license {
                            //license用于法律上的名稱
                            name POM_LICENCE_NAME
                            //官方的license正文頁面的URL
                            url POM_LICENCE_URL
                            //<!--項(xiàng)目分發(fā)的主要方式: repo,可以從Maven庫下載
                            //manual帖鸦, 用戶必須手動(dòng)下載和安裝依賴-->
                            distribution POM_LICENCE_DIST
                        }
                    }
                    //開發(fā)者信息
                    developers {
                        developer {
                            id POM_DEVELOPER_ID
                            name POM_DEVELOPER_NAME
                        }
                    }
                }
            }

        }
    }

    // 進(jìn)行數(shù)字簽名
    signing {
        required { isReleaseBuild() && gradle.taskGraph.hasTask("uploadArchives") }
        sign configurations.archives
    }

    // type顯示指定任務(wù)類型或任務(wù), 這里指定要執(zhí)行Javadoc這個(gè)task,這個(gè)task在gradle中已經(jīng)定義
    task androidJavadocs(type: Javadoc) {
        // 設(shè)置源碼所在的位置
        source = android.sourceSets.main.java.sourceFiles
    }

    // 生成javadoc.jar
    task androidJavadocsJar(type: Jar) {
        // 指定文檔名稱
        classifier = 'javadoc'
        from androidJavadocs.destinationDir
    }

    // 生成sources.jar
    task androidSourcesJar(type: Jar) {
        classifier = 'sources'
        from android.sourceSets.main.java.sourceFiles
    }

    // 產(chǎn)生相關(guān)配置文件的任務(wù)
    artifacts {
        archives androidSourcesJar
        archives androidJavadocsJar
    }
}





build.gradle

apply from: 'push.gradle'

gradle.properties文件:

# nexus服務(wù)器登陸時(shí)候的用戶名/密碼
NEXUS_USERNAME=admin
NEXUS_PASSWORD=admin123
# 在POM文件中使用的group ID
POM_GROUP_ID=com.limushan.test
# POM文件中指向你網(wǎng)站的地址
POM_URL=https://github.com/limushan
# SCM是指版本管理工具
POM_SCM_URL=https://github.com/
POM_SCM_CONNECTION=https://github.com/limushan
POM_SCM_DEV_CONNECTION=https://github.com/limushan
# 你的開放協(xié)議相關(guān)信息
POM_LICENCE_NAME= The Apache License, Version 2.0
POM_LICENCE_URL= http://www.apache.org/licenses/LICENSE-2.0.txt
#POM_LICENCE_URL= https://github.com/facebook/react-native/blob/master/LICENSE
#POM_LICENCE_NAME= BSD License
POM_LICENCE_DIST=repo
# 開發(fā)者的相關(guān)信息
POM_DEVELOPER_ID=limushan
POM_DEVELOPER_NAME=limushan

# 庫名稱
POM_NAME=TEST Library
# artifactId
POM_ARTIFACT_ID=test
# 庫的打包格式為aar, 常見的還有jar
POM_PACKAGING=aar
# 庫的描述,說明他是干啥的
POM_DESCRIPTION=upload maven test
# 要發(fā)布的版本好,snapshots 版本可以使用格式 1.0.0-SNAPSHOT
VERSION_NAME=1.0.0

Terminal中輸入命令gradlew uploadArchives
提示成功說明已經(jīng)上傳到了你的私庫中
看下私庫芝薇,如下表示上傳成功

關(guān)于POM文件配置

四.倉庫版本使用

使用和MavenCenter庫的使用規(guī)則一樣

  • 在Project的build.gradle配置Maven庫地址(這里可以直接使用組倉庫地址,因?yàn)榻M倉庫配置了成員包含release和snapshot兩個(gè)私庫)
allprojects {
    repositories {
        //...
        maven {
            url 'http://127.0.0.1:8081/repository/maven-public/'
        }
        //...
    }
}
  • 在module的build.gradle配置依賴庫
dependencies {
    implementation ('com.limushan.test:test:1.0.0')
}

build下,可以看到依賴已經(jīng)加入項(xiàng)目中:

五.發(fā)布到MevenCenter庫

發(fā)布到Meven 中央倉庫作儿,流程和發(fā)布到 私庫類似洛二,最后多一個(gè)發(fā)布流程
具體可參考下面的文章:發(fā)布開源項(xiàng)目到Maven 中心倉庫

六.依賴更新

項(xiàng)目依賴的相同版本遠(yuǎn)程包如果有更新,會(huì)有提醒或者自動(dòng)更新嗎攻锰?
答案是不會(huì)的晾嘶,在執(zhí)行build、compile等任務(wù)時(shí)會(huì)解析項(xiàng)目配置的依賴并按照配置的倉庫去搜尋下載這些依賴娶吞。默認(rèn)情況下垒迂,Gradle會(huì)依照Gradle緩存(默認(rèn)緩存位置:.../.gradle/caches目錄下)->你配置的倉庫的順序依次搜尋這些依賴,并且一旦找到就會(huì)停止搜索妒蛇。如果想要忽略本地緩存每次都進(jìn)行遠(yuǎn)程檢索可以通過在執(zhí)行命令時(shí)添加--refresh-dependencies參數(shù)來強(qiáng)制刷新依賴机断。

gradlew  build --refresh-dependencies

還可以通過下面的方法為緩存指定一個(gè)時(shí)效去檢查遠(yuǎn)程倉庫的依賴版本(只對SNAPSHOT(changing)和+號(dynamic)版本,默認(rèn)是24小時(shí)自動(dòng)更新绣夺。)

configurations.all {
    //每隔1分鐘檢查遠(yuǎn)程依賴是否存在更新
    resolutionStrategy.cacheChangingModulesFor 1, 'minutes'
    // 采用動(dòng)態(tài)版本聲明的依賴緩存1分鐘
    resolutionStrategy.cacheDynamicVersionsFor 1, 'minutes'
}

參考文章
Android 打包上傳AAR文件到本地Maven倉庫并且引用
maven私服搭建及gradle上傳

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末吏奸,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子陶耍,更是在濱河造成了極大的恐慌奋蔚,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件物臂,死亡現(xiàn)場離奇詭異旺拉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)棵磷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門蛾狗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仪媒,你說我怎么就攤上這事沉桌⌒蝗担” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵留凭,是天一觀的道長佃扼。 經(jīng)常有香客問我,道長蔼夜,這世上最難降的妖魔是什么兼耀? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮求冷,結(jié)果婚禮上瘤运,老公的妹妹穿的比我還像新娘。我一直安慰自己匠题,他們只是感情好拯坟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著韭山,像睡著了一般郁季。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上钱磅,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天梦裂,我揣著相機(jī)與錄音,去河邊找鬼续搀。 笑死塞琼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的禁舷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼毅往,長吁一口氣:“原來是場噩夢啊……” “哼牵咙!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起攀唯,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤洁桌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后侯嘀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體另凌,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年戒幔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吠谢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡诗茎,死狀恐怖工坊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤王污,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布罢吃,位于F島的核電站,受9級特大地震影響昭齐,放射性物質(zhì)發(fā)生泄漏尿招。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一阱驾、第九天 我趴在偏房一處隱蔽的房頂上張望就谜。 院中可真熱鬧,春花似錦啊易、人聲如沸吁伺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽篮奄。三九已至,卻和暖如春割去,著一層夾襖步出監(jiān)牢的瞬間窟却,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工呻逆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夸赫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓咖城,卻偏偏與公主長得像茬腿,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子宜雀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容