Kotlin Gradle项目添加子模块后出现'api配置未找到'错误
解决Gradle项目添加子模块后
Configuration with name 'api' not found错误 问题根源
api依赖配置是由java-library插件提供的,你在根项目的subprojects代码块里,先写了依赖声明(用到了api),之后才去应用java-library插件。Gradle执行顺序是从上到下,处理依赖时还没加载出api配置,自然触发报错。另外子模块里的冗余配置也会加重冲突。
修复步骤
1. 调整根项目subprojects块的代码顺序
把插件应用代码移到依赖声明前面,确保java-library插件先加载,再使用它提供的api配置。修改后的根项目subprojects块如下:
subprojects { val kotlinVersion = "1.8.0" // 先应用所有需要的插件 apply(plugin = "org.jetbrains.kotlin.jvm") apply(plugin = "java") apply(plugin = "java-library") apply(plugin = "maven-publish") apply(plugin = "kotlin") apply(plugin = "org.jmailen.kotlinter") // 再处理任务配置 tasks.withType<JavaCompile>().configureEach { options.encoding = "UTF-8" options.compilerArgs.addAll(listOf("-Xlint:all", "-Xlint:-serial")) } // 最后声明依赖 dependencies { api("my-dependency") } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class) { kotlinOptions { jvmTarget = "17" javaParameters = true } } java { withSourcesJar() } }
2. 清理子模块的冗余配置
子模块存在重复插件声明,且用buildscript引入Spring Boot插件的方式不够规范,建议改用Plugins DSL简化配置,同时避免重复加载插件。修改后的子模块build.gradle.kts如下:
plugins { id("java-library") kotlin("jvm") version "1.8.0" id("org.springframework.boot") version "3.0.2" } tasks.withType<BootJar> { archiveFileName.set("$archiveBaseName.$archiveExtension") } tasks.getByName("jar").enabled = true tasks.withType<BootRun> { systemProperties = System.getProperties() } dependencies { // 这里添加你的子模块依赖 }
额外注意事项
- 确保根项目和子模块的Kotlin版本一致,避免版本冲突
- 如果子模块是Spring Boot应用,
java-library插件和Spring Boot插件可以共存,你已经开启普通jar任务的配置没问题
内容的提问来源于stack exchange,提问作者Whizzil
相关产品推荐
相关产品推荐

