为什么Protobuf生成的Kotlin代码出现JvmField、内联相关警告?如何解决?
消除Protobuf自动生成Kotlin代码编译警告的可行方案
你遇到的两类警告是旧版Protobuf官方Kotlin代码生成器的已知问题,无需手动修改生成代码,可通过以下方案消除:
方案1(推荐):配置构建工具+IDE识别生成代码
自动生成的代码不需要做代码检查,直接将对应目录标记为生成源代码目录即可同时消除IDE和编译环节的警告:
- IDE配置:右键你的
$KOTLIN_MAIN_PATH下存放生成Proto代码的目录,选择Mark Directory as -> Generated Sources Root,IDEA会默认关闭该目录下所有代码的检查警告。 - 构建配置(以Gradle Kotlin DSL为例):
如果你使用Maven,在sourceSets { main { kotlin.srcDir("你配置的$KOTLIN_MAIN_PATH相对路径") } } tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> { kotlinOptions.freeCompilerArgs += listOf( // 全局屏蔽所有生成代码的警告 "-Xsuppress-warnings-from-generated-code", // 也可以单独屏蔽对应两类警告 "-Xno-warning=jvm-field-on-private-property", "-Xno-warning=useless-inline" ) }kotlin-maven-plugin的configuration.args节点下添加上述相同的编译器参数即可。
- IDE配置:右键你的
方案2(根治):升级依赖版本
该类生成代码的警告问题在Protobuf编译器3.21+、Kotlin Gradle/Maven插件1.7+版本中已经被官方修复,升级对应依赖后重新执行
protoc生成代码,警告会直接消失。方案3(仅IDE生效):关闭IDEA对应检查
如果不需要修改构建配置,只需要消除IDEA的弹窗警告,可直接调整检查规则:
- 打开
Settings -> Editor -> Inspections -> Kotlin - 搜索
JvmField on private property,将检查等级调整为No highlighting, only fix或直接关闭 - 搜索
Suspicious 'inline' modifier,同样调整检查等级或关闭即可。
- 打开
内容的提问来源于stack exchange,提问作者Elad Galili
相关产品推荐
相关产品推荐

