前言
在一个大项目中,特别是组件化后的项目,会有很多子工程生成aar来使用,除了业务子工程,还有许多基础组件aar,比如本人负责的UI组件aar,这些aar都会上传到公司的私有maven库,上传的maven需要做很多配置,还有maven库迁移(比如考拉被阿里收购,maven库迁移到阿里的maven库),需要每个aar都修改配置,如果实现一个让aar上传到maven的插件后,就可以统一配置maven库。
AarUpload源码 如果对gradle plugin不了解,可以先看基础篇
Upload
定义上传任务,命名规则:
- 如果是snapshot版本,就用版本号-SNAPSHOT
- 如果不是,则直接用最后一个tag命名
注释写的很清楚,代码:
class AarUploadTask extends Upload {
String groupId = null
String artifactId = null
String version = null
@TaskAction
protected void upload() {
if (groupId == null || artifactId == null) return
//配置仓库,该demo设置本地maven库
repositories {
mavenDeployer {
repository url: "file:///Users/xufangzhen/.m2/repository"
//计算版本信息,如果是snapshot版本,就直接拿版本号,如果是正式版,拿最后tag作为版本号
pom.version = getVersionName()
pom.artifactId = artifactId
pom.groupId = groupId
}
}
//开始上传
println "start upload " + groupId + ":" + artifactId + ":" + version
super.upload()
}
/**
* ./gradlew clean -PisSnapshot=false :klui:aarUpload
* 使用如上的命令打包来上传 klui.aar
**/
def getVersionName() {
def isSnapshot = ""
if (project.hasProperty("isSnapshot")) {
isSnapshot = project.property("isSnapshot")
}
//如果是snapshot且版本号不为空,就用版本号-SNAPSHOT命名
if (Boolean.parseBoolean(isSnapshot) && version != null) {
return version + '-SNAPSHOT'
} else {
//否则使用最后提交的tag名命名
return 'git describe --tags --abbrev=0'.execute().text.trim()
}
}
}
AarUploadPlugin
class AarUploadPlugin implements Plugin<Project> {
void apply(Project target) {
target.pluginManager.apply 'maven'
def aarUploadTask = target.task('aarUpload', type: AarUploadTask, dependsOn: 'assemble')
//设置源码上传
aarUploadTask.doFirst {
target.task(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
}
aarUploadTask.configuration = target.configurations.archives
}
}
到这里插件已写完,最后配置下properties文件就好了
image.png
最后点击uploadArchives上传该插件即可
image.png
使用
除了必要的仓库地址和classpath外
设置源码上传的配置
apply plugin: 'aar.upload'
aarUpload {
artifactId = 'klui' //aar名字
version = '1.3.0' //版本
groupId = 'com.xfz.plugin' //groupId
}








网友评论