在build.gradle.kts中配置Maven发布时遇Unresolved reference错误求助
问题描述
多次尝试使用Gradle构建功能均未成功,添加构建步骤时总会出现“Unresolved reference to ...”错误。本次尝试将库发布到Maven仓库,已参考Gradle官方文档添加java-library和maven-publish插件并配置publishing块,但publications处提示“Unresolved reference: publications”,附上完整build.gradle.kts代码,怀疑遗漏相关依赖或导入,恳请解决。
plugins { id("com.android.library") id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.plugin.serialization") id("java-library") id("maven-publish") } android { namespace = "com.domain.projectname" compileSdk = 33 defaultConfig { minSdk = 24 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { isMinifyEnabled = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } publishing { publications { create<MavenPublication>("myLibrary") { from(components["java"]) } } repositories { maven { name = "myRepo" url = uri(layout.buildDirectory.dir("repo")) } } } } dependencies { implementation("androidx.core:core-ktx:1.8.0") implementation("androidx.appcompat:appcompat:1.6.1") implementation("com.google.android.material:material:1.8.0") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") }
解决方案
问题根源
你错误地将publishing块嵌套在了android块内部,而maven-publish插件的配置块必须放在脚本根级别(与android、dependencies块同级),否则Gradle无法识别publications等属性。此外,Android库发布时不能使用components["java"],应该绑定Android的构建变体组件(比如release)。
修改后的完整配置
plugins { id("com.android.library") id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.plugin.serialization") id("java-library") id("maven-publish") } android { namespace = "com.domain.projectname" compileSdk = 33 defaultConfig { minSdk = 24 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } buildTypes { release { isMinifyEnabled = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } } compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } } // 将publishing块移到根级别 publishing { publications { create<MavenPublication>("myLibrary") { // 使用Android的release变体组件替代java组件 from(components["release"]) } } repositories { maven { name = "myRepo" url = uri(layout.buildDirectory.dir("repo")) } } } dependencies { implementation("androidx.core:core-ktx:1.8.0") implementation("androidx.appcompat:appcompat:1.6.1") implementation("com.google.android.material:material:1.8.0") implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") }
关键修改点
- 把
publishing块从android内部移到脚本根目录,让Gradle能正确加载maven-publish插件的配置项 - 将
from(components["java"])改为from(components["release"]),适配Android库的构建变体机制——Android插件会为每个构建变体生成对应的组件,这里选择发布release版本的库
内容的提问来源于stack exchange,提问作者Guian
相关产品推荐
相关产品推荐

