-Kotlin Gradle 插件1.7+弃用compilerArgs透传,-Werror不被compilerOptions识别,须用allWarningsAsErrors=true;JVM模块在kotlin{compilerOptions{}}中设set(true),Android模块(AGP 8.0+)在android{kotlinOptions{}}中直接赋值。

Kotlin 编译警告变错误的核心开关是 -Werror,但直接加在 kotlinc 参数里不生效——必须通过 Gradle 的 Kotlin 插件配置项控制。
为什么 -Werror 在 compilerOptions 里无效
Kotlin Gradle 插件(1.7+)已弃用旧式 compilerArgs 直接透传方式。Kotlin DSL 中的 compilerOptions 是类型安全的配置块,-Werror 不是它认可的顶层选项,强行写入会导致构建失败或静默忽略。
- Gradle 构建日志里出现
Unknown compiler option '-Werror'就是这个原因 - 即使没报错,
javac阶段的警告仍会继续输出,-Werror实际未启用 - 真正起作用的是
allWarningsAsErrors = true这个布尔属性
正确配置位置:模块级 build.gradle.kts 的 kotlin 块
必须放在 android { } 或 plugins { id("org.jetbrains.kotlin.jvm") } 后的 kotlin { } 闭包内,不是 tasks.withType<kotlincompile></kotlincompile> 里。
- 对 JVM 模块:
kotlin { compilerOptions { allWarningsAsErrors.set(true) } } - 对 Android 模块(AGP 8.0+):
android { kotlinOptions { allWarningsAsErrors = true } } - 旧版 AGP(kotlinOptions { freeCompilerArgs += "-Werror" },但仅限 Kotlin
常见误配导致失效的三个点
很多项目配了却没效果,往往卡在这几个地方:
- 把
allWarningsAsErrors = true写在tasks.withType<kotlincompile></kotlincompile>里——这是任务实例配置,Kotlin 插件已不读取 - Android 项目混用
kotlinOptions和compilerOptions,AGP 8.0+ 只认前者,后者被忽略 - 启用了
optIn或@OptIn注解但没同步加allWarningsAsErrors,部分警告(如实验 API 使用)仍不会报错
最易被忽略的是:allWarningsAsErrors 对 deprecation 警告默认不生效,除非同时开启 suppressWarnings = false(默认就是 false,但某些模板会显式设为 true)。如果只看到 “deprecated” 警告却不报错,先检查这个。











