android多个library module时,上传aar到私有maven仓库

一.工程目录

android多个library module时,上传aar到私有maven仓库_第1张图片

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

android多个library module时,上传aar到私有maven仓库_第2张图片

如图点击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'
}

 

你可能感兴趣的:(打包发布)