建立和生成本地或遠端Maven倉庫
阿新 • • 發佈:2018-12-31
在我們用普通方法對Libray Module進行打包為 test.jar,然後放到libs中使用的過程中,如果Library Module有遠端依賴時,我們在使用test.jar的時候就會出現 ClassNotFoundException。因為遠端依賴並沒有被打包到test.jar中。
為什麼一定要通過釋出Maven庫才能訪問Library Module的遠端依賴
- 首先,我們需要了解打包過程。當我們需要對一個Library Module進行打包的時候,Library專案的遠端依賴不會被一起打包到aar或jar檔案中。因為打包的過程其實就是對編譯出來的class二進位制檔案進行壓縮打包而已,而編譯過程下載到本地的遠端依賴包一般是在 Users/username/.gradle/cache/modules-2/files-2.1
- 然後,我們要知道maven倉庫有什麼特別的,可以讓我們通過compile的設定就能知道已經打包的aar或者jar需要哪些遠端依賴。一個maven目錄如下
其中,所有Library Module的遠端依賴都在.pom檔案中,而在主專案就是通過.pom檔案來下載這些遠端依賴的。 - 結論 : 所以,要想打包的 Library Module 可以包含依賴,就要把這個 Library Module 釋出成一個Maven倉庫。通過像其他遠端第三庫一樣,在 app/build.gradle 中配置 compile ‘groupId:articleId:version’ 來使用。
注 : 關於如何檢視下的jar和aar檔案位置可以在 app/build.gradle 配置指令碼程式碼如下:
task showMeCache << {
configurations.compile.each { println it }
}
釋出Maven倉庫
釋出/使用本地Maven倉庫
- 在 Library_Directory/build.gralde 中加入如下程式碼,確保 ANDROID_HOME已經配置:
Note :
* version 是 Library 版本
* groupId 是 Library 包名
* artifactId 是 Library 名稱
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
repository(url: "file://localhost/" + System.getenv("ANDROID_HOME")
+ "/extras/android/m2repository/")
pom.version = '1.0-SNAPSHOT'
pom.groupId = 'your.package'
pom.artifactId = 'sdk-name'
}
}
}
- 完成後,會在如上指定目錄URL(/extras/Android/m2repository/…) 中生成相應目錄作為本地Maven倉庫。
3.因為是在自定義目錄下生成的本地Maven倉庫,專案預設的 mavenLocal 一般是在 /Users/username/.m2/repository 下面,所以需要對專案需要Maven倉庫進行配置。
程式碼配置:
android/build.gradle
allprojects {
repositories {
mavenLocal()
jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
maven {
url "file:///C:/Users/username/AndroidHomePath/extras/android/m2repository"
}
}
}
- 配置好了專案Maven倉庫的來源,配置上對這個Maven倉庫中那個生成的庫的依賴就ok了
android/app/build.gradle
dependencies {
...
compile 'groupId:articleId:version'
...
}
最後,嘗試build後,看看Library Module的遠端依賴有沒有下載到本地就ok
釋出/使用遠端Maven倉庫
對於釋出遠端maven倉庫,就有很多選擇,可以釋出到自己的區域網伺服器,中央倉庫和Jboss倉庫。而釋出到私服可以直接選擇釋出到git上去管理。
對於遠端倉庫的釋出程式碼如下:
apply plugin: 'maven'
uploadArchives {
repositories {
mavenDeployer {
repository(url: "http://xxx/xxx")
pom.version = '1.0-SNAPSHOT'
pom.groupId = 'your.package'
pom.artifactId = 'sdk-name'
}
}
}
使用的時候只需要將 android/build.gradle 中 maven 的 url 改成伺服器地址就ok。