Gradle upload plugin

2019-10-24  本文已影响0人  许方镇

前言

在一个大项目中,特别是组件化后的项目,会有很多子工程生成aar来使用,除了业务子工程,还有许多基础组件aar,比如本人负责的UI组件aar,这些aar都会上传到公司的私有maven库,上传的maven需要做很多配置,还有maven库迁移(比如考拉被阿里收购,maven库迁移到阿里的maven库),需要每个aar都修改配置,如果实现一个让aar上传到maven的插件后,就可以统一配置maven库。
AarUpload源码 如果对gradle plugin不了解,可以先看基础篇

Upload

定义上传任务,命名规则:

  1. 如果是snapshot版本,就用版本号-SNAPSHOT
  2. 如果不是,则直接用最后一个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
}
上一篇 下一篇

猜你喜欢

热点阅读