建站公司見客戶沒話說b2b商務(wù)平臺
文章目錄
- 具體流程
筆者的運行環(huán)境:
Android Studio Flamingo | 2022.2.1
Android SDK 33
Gradle 8.0.1
JDK 17
??Android 的 Gradle 項目與一般的 Gradle 項目是不同的,因此對將 Gradle 模塊打包發(fā)布到本地 Maven 倉庫來說,對普通 Gradle 項目適用的方法,對 Android 項目是不適用的。
??因為普通 Gradle 項目打包生成的是 JAR 包,而 Android 項目打包生成的是 AAR 包。不過說到底,AAR 包和 JAR 包一樣,也就是一種壓縮包。只不過,AAR 包是在 JAR 包的基礎(chǔ)之上的二次壓縮。具體來說,AAR 包是將源碼編譯生成的 JAR 包再和安卓的清單文件放在一起又制成了一個新的壓縮包。
??不過,也就是這點區(qū)別導(dǎo)致了它們關(guān)于發(fā)布到 Maven 倉庫的流程有些不同。
具體流程
-
首先,需要先安裝 Maven,否則 Gradle 將無法感知本地 Maven 倉庫的位置。關(guān)于這方面的內(nèi)容,可見筆者的另一篇博客:
Maven 的下載安裝教程:
https://blog.csdn.net/wangpaiblog/article/details/112689500 -
這里以安卓打包發(fā)布到本地 Maven 倉庫的流程為例,并假設(shè)讀者使用的是一種 Gradle 多模塊項目。這里演示的是將其中的一個模塊打包發(fā)布到本地的 Maven 倉庫。
-
在需要打包發(fā)布到本地 Maven 倉庫的那個模塊的
build.gradle
中,添加如下代碼。plugins {id 'maven-publish' }task sourceJar(type: Jar) {from android.sourceSets.main.java.srcDirsarchiveClassifier = "sources" }publishing {publications {maven(MavenPublication) {groupId = 'Maven 模塊的 groupId'artifactId = 'Maven 模塊的 artifactId'version = 'Maven 模塊的 version'// 上傳 AAR 包afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) }// 向 Maven 倉庫中上傳源碼artifact sourceJar}} }
其中,讀者需要將上述代碼中的 groupId、artifactId、version 改成實際的值。
【提示】
??有人可能會使用如下額外的配置:
publishing {// ...省略其它內(nèi)容...repositories {maven {url = "http://my.org/repo"}} }
??此配置是將 Gradle 模塊發(fā)送到 Maven 網(wǎng)絡(luò)倉庫上時才需要設(shè)置的。對本文來說,這是不必要的。
-
在 Android 上的 Gradle 面板中點擊
publishToMavenLocal
即可完成發(fā)布。
【踩坑提醒】
??有的讀者可能會遇到 Gradle 面板沒有
publishToMavenLocal
這一選項的問題。關(guān)于這方面的內(nèi)容,可見筆者的另一篇博客:??解決 Android Studio 的 Gradle 面板上只有關(guān)于測試的 task 的問題:
https://blog.csdn.net/wangpaiblog/article/details/132124402
-
發(fā)布到本地 Maven 倉庫成功之后,Gradle 會在 Maven 倉庫在相應(yīng)位置創(chuàng)建三個文件:
-
artifactId-version.aar
-
artifactId-version.pom
-
artifactId-version-sources.jar
-
-
然后,在 Gradle 項目中的根模塊中的
settings.gradle
添加如下代碼來引入本地 Maven 倉庫。這樣 Gradle 在解析依賴時就會額外去本地 Maven 倉庫中尋找。dependencyResolutionManagement {repositories {mavenLocal()} }
-
現(xiàn)在,在 Gradle 項目中就可以像其它依賴一樣使用
implementation
來引用剛發(fā)布到本地 Maven 倉庫的依賴了。