一.工程目錄
工程目錄如何所示:app引用lib1,lib1引用lib2。
項目地址:https://github.com/Ya-Jun/MavenDemo
二.編寫gradle的文件
1.添加upload-aar.gradle的文件
創建upload-aar.gradle文件,並將其放入工程根目錄。
apply plugin: 'maven-publish'
//上傳groupId名稱
def MAVEN_GROUPID = 'com.demo'
//maven私服用戶名
def MAVEN_USERNAME = 'admin'
//maven私服密碼
def MAVEN_PASSWORD = 'admin123'
def MAVEN_URL = 'http://localhost:8081/repository/maven-releases/'
publishing {
publications {
uploadSDK(MavenPublication) {
groupId MAVEN_GROUPID
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.implementation.allDependencies.withType(ModuleDependency) { ModuleDependency dp ->
if (dp.version != "unspecified") {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', dp.group)
dependencyNode.appendNode('artifactId', dp.name)
dependencyNode.appendNode('version', dp.version)
if (dp.excludeRules.size() > 0) {
def exclusions = dependencyNode.appendNode('exclusions')
dp.excludeRules.each { ExcludeRule ex ->
def exclusion = exclusions.appendNode('exclusion')
exclusion.appendNode('groupId', ex.group)
exclusion.appendNode('artifactId', ex.module)
}
}
}
}
}
}
}
repositories {
maven {
url MAVEN_URL
credentials {
username MAVEN_USERNAME
password MAVEN_PASSWORD
}
}
}
}
task publishToMaven(dependsOn: ['assemble', 'publish']) {
doLast {
println "finish publish to maven"
}
}
publishToMaven.setGroup('upload')
2.在各個lib module gradle文件中添加引用
apply from: '../upload-aar.gradle'
3. 在各個lib module gradle文件中添加“artifactId”“version”配置
因爲“artifactId”“version”各個lib module都不一樣,所以放在各自的gradle中配置
//maven配置
publishing {
publications {
uploadSDK(MavenPublication) {
artifact "build/outputs/aar/mylibrary1-release.aar"
artifactId "MyLibrary1"
version android.defaultConfig.versionName
}
}
}
4.在lib1中添加lib2的引用
因爲最終app只希望有一個引用,所以在lib1的gradle中要填加如下引入,這樣在生成的pom文件中會帶上lib2的引用。當然你也可以把這行代碼添加到app的gradle中。
implementation 'com.demo:MyLibrary2:1.0.0.0'
三.上傳aar
如圖點擊publishToMaven,分別上傳lib1,lib2
四.引用aar
1.聲明maven服務器
maven {
url "http://localhost:8081/repository/maven-releases/"
credentials {
username = "admin"
password = "admin123"
}
}
2.引用aar
implementation 'com.demo:MyLibrary1:1.0.0.0'
五.常見問題
1.gradle中配置的exclude寫法不正確,導致生成pom文件異常,引入的時候還需要再exclude一次。
例如:錯誤寫法
implementation('com.facebook.fresco:animated-gif:0.14.1') {
exclude module: 'support-v4'
}
正確寫法:
implementation('com.facebook.fresco:animated-gif:0.14.1') {
exclude group: 'com.android.support', module: 'support-v4'
}