【学习记录】发布Android Library到阿里云私有maven仓库

1,613 阅读3分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天 点击查看活动详情

1 前言

最近应公司需求, 自己搭建一个MVVM快速开发框架, 搭建框架不能只是本地引入使用, 要进行框架维护,就要把框架发布到maven仓库. 常用的maven仓库有一下几种:

  1. 搭建本地maven仓库
  2. 自己购买服务器或使用公司服务器搭建maven仓库
  3. 使用阿里云私有maven仓库 权衡之后, 最后我采用了第三种方案: 使用阿里云私有maven仓库进行发布

2 行动

第一步 注册阿里云账号 (此步骤省略)
第二步 打开网址阿里云 Maven 仓库 · 云效 Packages · 企业级制品仓库 (aliyun.com) 并开通制品仓库, 我们切换到maven仓库

image.png 看到上图, 说明我们的仓库已经创建完成了

第三步 接下来我们就需要创建我们自己的依赖库了

image.png 如图, 我创建了一个项目并包含了一个名为mylibrary的Module, 我们要做的就是把mylibrary发布到我们之前创建的maven仓库中去.

①我们先在gradle.properties 文件中添加我们预设好的版本号

version=0.0.1
#version=0.0.1-SNAPSHOT

这两个版本号的区别: 带-SNAPSHOT后缀的是发布到非生产仓库的, 不带后缀的发布到生产仓库, 我们可以先发布到非生产仓库后, 测试使用没有问题后, 我们在把版本号切换到没有后缀的, 把依赖库发布到生产仓库中

②我们在mylibrary下面创建一个gradle文件: publish.gradle, 文件的内容如下:

apply plugin: 'maven-publish'

def getReleaseRepositoryUrl() {
    return "https://packages.aliyun.com/maven/repository/****-release-****/"
}

def getSnapshotRepositoryUrl() {
    return "https://packages.aliyun.com/maven/repository/****-snapshot-****/"
}

def getRepositoryUsername() {
    return "************"
}

def getRepositoryPassword() {
    return "*************"
}

task sourcesJar(type: Jar) {
    classifier = 'sources'
    from android.sourceSets.main.java.srcDirs
}

publishing {
    publications {
        PublishAndroidAssetLibrary(MavenPublication) {
            groupId 'com.mufeng.mylibrary'
            artifactId 'mylibrary'
            version version
            afterEvaluate {
                artifact bundleReleaseAar
            }
            artifact sourcesJar

            pom.withXml {
                //在pom.xml添加依赖关系
                def dependenciesNode = asNode().appendNode('dependencies')
                //拿到所有编译时的依赖
                def dependenciesList = []
                dependenciesList.addAll(configurations.implementation.allDependencies)
                dependenciesList.addAll(configurations.api.allDependencies)
                dependenciesList.each {
                    if (null != it.group) {
                        def dependencyNode = dependenciesNode.appendNode('dependency')
                        dependencyNode.appendNode('groupId', it.group)
                        dependencyNode.appendNode('artifactId', it.name)
                        dependencyNode.appendNode('version', it.version)
                        dependencyNode.appendNode('scope', 'compile')
                    }
                }

            }
        }
    }
}

def getRepositoryUrl() {
    if (version != null && version.toLowerCase().endsWith("snapshot")) {
        return getSnapshotRepositoryUrl()
    } else {
        return getReleaseRepositoryUrl()
    }
}


publishing {
    repositories {
        maven {
            url getRepositoryUrl()
            credentials {
                username = getRepositoryUsername()
                password = getRepositoryPassword()
            }
        }
    }
}

我们引用maven-publish插件进行发布,getReleaseRepositoryUrl方法返回的是生产仓库的上传地址, getSnapshotRepositoryUrl 方法返回的是非生产仓库的上传地址, getRepositoryUsername返回的是仓库的用户名, getRepositoryPassword返回的是仓库的密码,getRepositoryUrl此方法是根据版本号的后缀判断并获取上传仓库的地址.

然后我们配置好groupId artifactId version

我们需要在mylibrary 的build.gradle文件中, 在android{}同级, plugins的下面添加代码

plugins {
    id 'com.android.library'
    id 'kotlin-android'
    id 'kotlin-kapt'
}
apply from: "publish.gradle"
android {
    ...
}

最后, 我们调用插件发布命令:

gradle publish

进行发布

命令执行成功后我们到阿里云效仓库列表去查看:

image.png 看到我们发布成功了, 我们可以使用我们熟悉的gradle方式进行引入, 引入之前, 我们需要在项目级build.gradle/settings.gradle 中添加如下代码:

allprojects {
  repositories {
    maven {
      url 'https://maven.aliyun.com/repository/public'
    }
    maven {
      credentials {
        username '************************'
        password '************'
      }
      url 'https://packages.aliyun.com/maven/repository/****-release-****'
    }
    maven {
      credentials {
        username '************************'
        password '************'
      }
      url 'https://packages.aliyun.com/maven/repository/****-snapshot-****'
    }
  }
}

才能成功引入

3 出现的问题

在发布插件的过程中, 出现了一个问题, 就是采用阿里云帮助文档进行配置发布时出错了, 导致无法发布成功, 问题根源出现在, 阿里云的帮助文档还是使用的以前的老版本进行上传发布的, 当我们升级到Gradle7.0以上是, 发布插件要使用maven-publish插件进行发布, 并且发布配置信息的编写方式也变了. 经过在网上的查找学习, 以及在官方文档上的学习, 才解决这个无法发布成功的问题.

最后

感谢你看到最后, 最后再说两点~
①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
我是小码农沐枫,一个热爱学习、热爱编程的山东人

(文章内容仅供学习参考, 如有侵权,非常抱歉,请立即联系作者删除。)