一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天 点击查看活动详情。
1 前言
最近应公司需求, 自己搭建一个MVVM快速开发框架, 搭建框架不能只是本地引入使用, 要进行框架维护,就要把框架发布到maven仓库. 常用的maven仓库有一下几种:
- 搭建本地maven仓库
- 自己购买服务器或使用公司服务器搭建maven仓库
- 使用阿里云私有maven仓库 权衡之后, 最后我采用了第三种方案: 使用阿里云私有maven仓库进行发布
2 行动
第一步 注册阿里云账号 (此步骤省略)
第二步 打开网址阿里云 Maven 仓库 · 云效 Packages · 企业级制品仓库 (aliyun.com) 并开通制品仓库, 我们切换到maven仓库
看到上图, 说明我们的仓库已经创建完成了
第三步 接下来我们就需要创建我们自己的依赖库了
如图, 我创建了一个项目并包含了一个名为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
进行发布
命令执行成功后我们到阿里云效仓库列表去查看:
看到我们发布成功了, 我们可以使用我们熟悉的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插件进行发布, 并且发布配置信息的编写方式也变了. 经过在网上的查找学习, 以及在官方文档上的学习, 才解决这个无法发布成功的问题.
最后
感谢你看到最后, 最后再说两点~
①如果你持有不同的看法,欢迎你在文章下方进行留言、评论。
②如果对你有帮助,或者你认可的话,欢迎给个小点赞,支持一下~
我是小码农沐枫,一个热爱学习、热爱编程的山东人
(文章内容仅供学习参考, 如有侵权,非常抱歉,请立即联系作者删除。)