就在前几天,Android studio 更新到了 4.2(瞄的 我也不知道到底几点几,2020.3.1),伴随着正式的JDK 11环境以及 Gradle 7.0,迎来了一系列的 gradle 编译问题,当然,这里主要讨论 maven 发布相关的变更与适配。
这里直接抛出主要问题:以前的 maven plugin 已经被废弃,带来的是 maven-publish plugin 。从代码层面讲就是:
apply plugin: 'maven'
变成了:
apply plugin: 'maven-publish'
同时,相关脚本也进行了变更,直接贴上最新的脚本代码:
afterEvaluate {
publishing {
publications {
release(MavenPublication) {
from components.release
groupId = MAVEN_GROUP_ID
artifactId = MAVEN_ARTIFACTID
version = MAVEN_VERSION
}
}
repositories {
maven {
allowInsecureProtocol true
name = "nexus"
url = MAVEN_RELEASE_URL
credentials {
username = MAVEN_USERNAME
password = MAVEN_PASSWORD
}
}
}
}
}这里大写的属性均为 gradle.properties 中定义的与 maven 发布相关的变量,通过命名应该很容易知道。
主要说两点:
- 对于非 https 的仓库地址,需要使用
allowInsecureProtocol字段,包括引用该仓库的地方 - 对于需要上传的 maven 仓库,需要显式指定 name,因为在编译后,会生成相关任务,比如这样:

另外,对于 release(MavenPublication) 节点中 from components.release 字段,是有含义的~ 官网描述如下:

换成中文说就是:一个 module 的不同变种。
而对于 Android 来说,一般情况下有两种 lib,一种是 比如 gradle 插件的 Jar lib,另一种为 资源库类型的 AAR lib,这里分开说明。
- Jar lib
纯 jar 包,也就是 gradle 配置为:apply plugin: 'java-library' 类型的 module,直接按照官方的例子进行配置:
from components.java
- AAR lib
对于 Android 特有的lib,即 gradle 配置为:apply plugin: 'com.android.library' 类型的 module,则需要根据 module 中的buildTypes 进行配置,比如:
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
}
}那么就有两种选择:
from components.release 或 from components.debug
即会上传不同版本的 aar 文件,这里还可以添加 Android 的风味,即:productFlavors,不进行赘述,详见官方文档:
https://developer.android.com/studio/build/build-variants?hl=zh-cn
关于一些报错:
- Plugin with id ‘your_plugin’ not found.
这种一般为上传到 maven 的库没有内容,大概率是 component 配置错误。
- Don’t know how to compute maven coordinate for artifact ‘Gradle API’ with component identifier of type ‘class org.gradle.internal.component.local.model.OpaqueComponentIdentifier’.
对于一些 java 的库,不要直接将 apply plugin: 'java-library' 改为 apply plugin: 'com.android.library' 。不然,你就会遇到这种错误。解决办法:没研究。
- Using insecure protocols with repositories, without explicit opt-in, is unsupported. Switch Maven repository ‘maven(http://maven.aliyun.com/nexus/content/groups/public/)’ to redirect to a secure protocol (like HTTPS) or allow insecure protocols. See https://docs.gradle.org/7.0.2/dsl/org.gradle.api.artifacts.repositories.UrlArtifactRepository.html#org.gradle.api.artifacts.repositories.UrlArtifactRepository:allowInsecureProtocol for more details.
就是需要在非 https 的 maven 仓库中指定 allowInsecureProtocol 比如:
maven {
allowInsecureProtocol true
url MAVEN_RELEASE_URL
}大概就这些内容吧,遇到问题先看官方文档:
参考: 好像参考就是上面的文档,其他都没能真正解决我的一些问题,大多写的很复杂,而我的需求其实很简单。
本站广告由 Google AdSense 提供
0条评论