Android最新Maven Publish的发布配置,22.02.18

这篇博客记录了在更新Gradle版本后,由于'maven'插件被替换为'maven-publish',导致发布脚本失效的问题。作者通过研究并参考其他资料,成功地用maven-publish插件实现了针对dev、beta、release三种版本的发布,并详细分享了完整的配置代码。发布过程包括修改版本号、配置仓库URL、生成文档等步骤,最终实现了GUI方式的发布操作。
摘要由CSDN通过智能技术生成

最近更新了Gradle版本,然后就导致Android Studio 报错:
Plugin with id 'maven' not found
Plugin [id: 'maven'] was not found in any of the following sources
忘了具体是哪个错误了,反正就是类似的报错,maven被改成了maven-publish,这就造成了之前的发布脚本不能用了,由于之前那个一直用的很顺手,所以研究了一下,把思路拿过来。

之前的脚本是照搬:https://blog.csdn.net/ouyang_peng/article/details/56872556 配合自己的Maven仓库,非常方便。
大概思路就是:可通过简单的配置,发布不同的类型到不同的仓库,例如dev、beta、release,这样做的优点显而易见,版本互相隔离,dev版可以快速迭代,每次APP要发布正式版的时候,各个引用库只需要分别发一个release版,然后引用即可,对于版本迭代、回溯之类的非常方便。

找了一下maven-publish的相关文章,资料比较少,也并没有与之前思路一致的相关代码,没办法,自己凑吧。。。另外就是gradle官方的文档太繁琐了,我只是想知道怎么用,不想增加技能点,可能就几行代码,但是要去读那么老长的文档。。。本末倒置啊。。

找到两篇文章比较有用:
https://blog.csdn.net/qq_37455727/article/details/119778435
https://blog.csdn.net/LZK_Dreamer/article/details/120176653

然后大概看懂怎么回事了,于是乎开整。

下面是最终完整代码:(至于怎么用就不用说了吧,能找到这篇文章的人能不会用吗?)

apply plugin: 'maven-publish'

//每次打包就修改下面这4行就行了,要是配合jenkis就不用手动改了。
def pom_version_dev = '0.1.66-dev'  //DEV版本,版本号。
def pom_version_beta = '0.1.1-beta' //BETA版本,版本号。
def pom_version_release = '0.0.1'   //RELEASE版本,版本号。
def pom_version_type = 'DEV'        //指定打包类型:分为 DEV、BETA、RELEASE 三种

配置好之后,以下无需再修改!!!
def pom_name = 'android' //这个好像没用
def pom_description = 'my utils' //描述
def pom_groupId = 'xxxx.xxxxxxxxxxxxxxxxxxxx.my_library' //groupId
def pom_artifactId = 'utils'   //artificatId
def pom_version // 根据类型最终选择的版本名,无需关注

def repoDeployUserName = '私有仓库发布时的用户名'
def repoDeployPassword = '私有仓库发布时的密码'
def repoUrlRelease = 'http://maven.xxxxx.com/repository/android-release/'
def repoUrlBeta = 'http://maven.xxxxx.com/repository/android-beta/'
def repoUrlDev = 'http://maven.xxxxx.com/repository/android-dev/'
def repoUrl // 根据类型最终选择的上传URL,无需关注

// 这个好像用不到?
task cleanDir(type: Delete) {
    delete buildDir
}

// 生成文档注释
task androidJavadocs(type: Javadoc) {
    failOnError = false
    source = android.sourceSets.main.java.srcDirs  // 设置源码所在的位置
    ext.androidJar = "${android.sdkDirectory}/platforms/${android.compileSdkVersion}/android.jar"
    classpath += files(ext.androidJar)
}

// 将文档打包成jar 生成javadoc.jar
task androidJavadocsJar(type: Jar) {
    // 指定文档名称
    archiveClassifier.set('javadoc')
    from androidJavadocs.destinationDir
}

// 将源码打包 生成sources.jar
task androidSourcesJar(type: Jar) {
    archiveClassifier.set('sources')
    from android.sourceSets.main.java.srcDirs
}

// 是否是开发版本,开发版本带doc
def isDevOrBetaBuild(String version) {
    if (version == null || version.isEmpty()) {
        throw Exception(">>>>>>>>>>>>>>编译失败,POM_VERSION_TYPE = " + pom_version_type.toLowerCase() + " ,请确认maven_user.properties文件中 POM_VERSION_TYPE 参数填写正确,POM版本必须为(DEV、BETA、RELEASE)中的一种类型<<<<<<<<<<");
    }
    return version.toLowerCase().endsWith("dev") || version.toLowerCase().endsWith("beta");
}

afterEvaluate {
    if (pom_version_type.toLowerCase() == "dev") {
        repoUrl = repoUrlDev
        pom_version = pom_version_dev
    } else if (pom_version_type.toLowerCase() == "beta") {
        repoUrl = repoUrlBeta
        pom_version = pom_version_beta
    } else if (pom_version_type.toLowerCase() == "release") {
        repoUrl = repoUrlRelease
        pom_version = pom_version_release
    } else {
        throw Exception(">>>>>>>>>>>>>>上传失败,POM_VERSION_TYPE = " + pom_version_type + " ,请确认maven_user.properties文件中 POM_VERSION_TYPE 参数填写正确,POM版本必须为(DEV、BETA、RELEASE)中的一种类型<<<<<<<<<<");
    }

    // 输出一下相关信息
    println "pom_version_type = " + pom_version_type.toLowerCase()
    println "pom_version = " + pom_version
    println "repoUrl = " + repoUrl + "\n"

    publishing {
        publications {
            uploadArchives(MavenPublication) {   //uploadArchives是任务名字,可以随意取,压根用不到。
                from components.release   // 必须加这个,不然aar不会上传。

                if (isDevOrBetaBuild(pom_version)) {
                    artifact(androidSourcesJar)  //将源码打包进aar
                    artifact(androidJavadocsJar) //将注释打包进aar
                }

                description = pom_description
                groupId = pom_groupId
                artifactId = pom_artifactId
                version = pom_version
            }
        }

        repositories {
            maven {
                allowInsecureProtocol true    //是否支持不安全的连接
                name = pom_name
                url = repoUrl
                credentials {
                    username = repoDeployUserName
                    password = repoDeployPassword
                }
            }
        }
    }
}
//最新版本参考资料:
//https://blog.csdn.net/qq_37455727/article/details/119778435
//https://blog.csdn.net/LZK_Dreamer/article/details/120176653
//旧版本参考资料:
//https://blog.csdn.net/ouyang_peng/article/details/56872556


经过实际测试,是可以用的,dev发布之后带文档,beta和release不带文档。

另外发现几个不同

1就是,执行发布的时候得用命令:./gradlew publish 作为一个懒人,好不容易从DOS中挣扎出来,能再回去用命令?必须GUI。
在这里新建一个Gradle配置,Tasks填写 publish 即可。下次发布,直接选中这个配置,然后运行就可以了。

 

 

2跟之前有点不同的是,以前控制台会有正在传输aar的回显,知道进行到上传这一步了,现在没有,只会显示最终的success,有错误的话会报错,例如仓库不允许重复发布。不过这都是小事~~~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值