gradle8+,android studio将aar发布到私服仓库Nexus

993 阅读2分钟

编写你的uploadArchive.gradle上传模板文件

之前写了android studio2022.3.1 ,gradle8 打包aar、sources.jar 遇到的问题以及 Nexus通过web页面上传aar包。这次学习一下直接在项目中使用maven-push将aar发布到私服仓库。

首先需要一个上传的模板gradle文件,项目的根目录新建uploadArchive.gradle,将下面的代码copy到里面,当然这个文件也是参考站内的这篇文章juejin.cn/post/701336… 只不过稍微改动了用作者的代码在生成sources时在gradle8中运行出错。你需要把里面的东西改成你的信息,例如地址、账号、密码。

apply plugin: 'maven-publish'
//组织id
def GroupId = 'com.glc.top'
//项目id
def ArtifactId = 'top'
//版本号
def Version = '1.0.3'
//登录的nexus用户名
def userName = "admin"
//登录的nexus密码
def passWord = "admin"

//仓库地址
def releasesRepoUrl = "http://localhost:8081/repository/test/"


//生成sources保证aar可以查看源码
task generateSourcesJar(type:Jar){
    //这里gradle版本8以上有改动 需要用 archiveClassifier 而不是classifier
    archiveClassifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}
//生成javadoc
task generateJavadocJar(type: Jar){
    from android.sourceSets.main.java.srcDirs
    archiveClassifier.set("javadoc")
}

afterEvaluate {
    publishing {
        //发布的 arr 包配置
        publications{
            //名字可以自己指定,如果有多渠道,整段多复制一个
            release(MavenPublication){

                groupId = GroupId//公司域名
                artifactId = ArtifactId//该aar包的名称
                version = Version//版本号

                // 必须有这个 否则不会上传AAR包
                afterEvaluate { artifact(tasks.getByName("bundleReleaseAar")) }
                // 多渠道,可以自行指定aar路径
                // def projectName = project.getName()
                // artifact "build/outputs/aar/${projectName}-release.aar"
                // 上传source,这样使用方可以看到方法注释
                artifact generateSourcesJar
                // 上传javadoc,这样使用方可以看到方法注释
                artifact generateJavadocJar
                //依赖关系
                pom.withXml{
                    def dependenciesNode = asNode().appendNode("dependencies")
                    configurations.implementation.allDependencies.forEach(){
                        Dependency dependency ->
                            if (dependency.version != "unspecified" && dependency.name != "unspecified"){
                                def dependencyNode = dependenciesNode.appendNode('dependency')
                                dependencyNode.appendNode('groupId', dependency.group)
                                dependencyNode.appendNode('artifactId', dependency.name)
                                dependencyNode.appendNode('version', dependency.version)
                            }
                    }
                }
            }
        }
        //仓库地址配置
        repositories {
            maven {
                //允许使用 http
                allowInsecureProtocol = true
                url = releasesRepoUrl
                credentials {
                    username = userName
                    password = passWord
                }
            }
        }
    }
}

在需要生成的module下引入uploadArchive.gradle

然后在需要生成依赖的module的build.gradle中引入上面的模板文件

apply from: '../uploadArchive.gradle'

点击android studio侧边栏的Gradle

之后点击android studio 侧边栏的Gradle,找到module下的publishing点击publish等待执行完毕,如果你这里没有这些操作项,你可以查看这篇文章 android studio2022.3.1 ,gradle8 打包aar、sources.jar 遇到的问题

image.png

如果没有错误的话,这个时候首先你本地会生成对应的aar文件以及javadoc、sourcesjar,然后你的私服仓库中也会有对应的版本了

image.png

nexus仓库中对应的依赖文件

image.png

演示Demo