Gradle发布AAR至Artifactory报错:无法创建‘android’的Publication
问题解决:Gradle向Artifactory批量发布AAR变体
错误原因
你直接在publications块内写android.buildTypes.all,Gradle会将android识别为一个要创建的Publication名称,但它不属于已知的MavenPublication类型,因此抛出错误。此外你的依赖配置中存在Android Gradle插件版本重复的问题,会导致潜在冲突。
步骤1:修正依赖配置
删除重复的Android Gradle插件声明,保留一个稳定版本:
dependencies { classpath 'com.android.tools.build:gradle:7.2.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.0" classpath 'org.jfrog.buildinfo:build-info-extractor-gradle:latest.release' }
步骤2:修正发布配置
使用afterEvaluate块确保Android插件完成变体初始化后,再遍历创建对应的MavenPublication:
publishing { publications { // 等待Android插件完成变体创建后再执行 afterEvaluate { android.buildTypes.all { variant -> def publicationName = "${variant.name}Aar" "${publicationName}"(MavenPublication) { artifactId = "artifactory_artifactId-${variant.name}" groupId = "artifactory_groupId" version = "v1.0.0" // 直接使用变体的outputs获取aar文件,避免硬编码路径 artifact variant.outputs.first().outputFile // 如果需要添加classifier,可保留以下配置(可选) artifact variant.outputs.first().outputFile { classifier variant.name extension "aar" } } } } } // 配置Artifactory仓库(需补充你的仓库地址和凭据) repositories { maven { url "你的Artifactory仓库地址" credentials { username = artifactory_username password = artifactory_password } } } }
额外优化说明
- 使用
variant.outputs.first().outputFile替代硬编码路径,避免因项目结构或Gradle版本变化导致路径失效。 - 如果你的项目包含产品风味(Product Flavors),可以用
android.applicationVariants.all遍历所有组合变体(flavor + buildType),示例:
android.applicationVariants.all { variant -> def publicationName = "${variant.name}Aar" "${publicationName}"(MavenPublication) { artifactId = "artifactory_artifactId-${variant.name}" groupId = "artifactory_groupId" version = "v1.0.0" artifact variant.outputs.first().outputFile } }
内容的提问来源于stack exchange,提问作者Alessandro Violante
相关产品推荐
相关产品推荐

