android多個library module時,上傳aar到私有maven倉庫

一.工程目錄

工程目錄如何所示: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'
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章