我正在尝试在 Kotlin 中使用
@Serializable
注释。我可以使用 Gradle 构建项目,但它在 IntelliJ 中显示为红色,当我将鼠标悬停在 @Serializable
注释上时,会出现一条消息:
kotlinx.serializable compiler plugin is not applied to the module, so this
annotation would not be processed. Make sure you've setup your buildscript
correctly and re-import project.
我的
build.gradle.kts
文件如下所示:
plugins {
id("org.jetbrains.kotlin.jvm").version("1.3.50")
id("org.jetbrains.kotlin.plugin.serialization") version "1.3.50"
idea
}
repositories {
jcenter()
}
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation(group = "com.charleskorn.kaml", name = "kaml", version = "0.12.0")
testImplementation("org.jetbrains.kotlin:kotlin-test")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit")
}
我安装了最新版本的 Kotlin 插件 (1.3.50)。
您需要添加:
plugins {
application
kotlin("jvm") version "1.4.21"
kotlin("plugin.serialization") version "1.4.21"
}
这是 JetBrains 指定的,链接到 gradle:
https://github.com/Kotlin/kotlinx.serialization#setup
https://ktor.io/docs/kotlin-serialization.html#add_dependency
就我而言,我需要在项目级别 gradle
添加jvm插件plugins {
id 'org.jetbrains.kotlin.jvm' version '1.7.20' apply false
}
然后在 app gradle 我添加了
plugins {
id 'org.jetbrains.kotlin.plugin.serialization' version '1.7.20'
}
通过此配置我可以看到:
Record.serializer()
所以我成功了。问题是我正在使用
idea
插件来生成 IntelliJ 项目。当我通过打开 build.gradle.kts
文件导入项目时,一切都按预期工作。
我一开始没有以这种方式导入它的原因是因为我禁用了 Gradle 支持,所以当我打开
build.gradle.kts
文件时,它没有导入项目,只是在编辑器中打开它。如果您遇到这种情况,请点击 cmd
+shift
+a
并搜索 Gradle
,然后将该开关切换到 On
。重新启动 IntelliJ 后,您应该能够从 build.gradle.kts
文件导入项目,然后就可以开始了。
如果您使用 Maven 进行构建,那么您需要
<configuration>
<compilerPlugins>
<plugin>kotlinx-serialization</plugin>
</compilerPlugins>
</configuration>
如此处所述:https://github.com/Kotlin/kotlinx.serialization#maven
我已经从我的 pom.xml 中删除了该位,因为它从命令行编译得很好,但后来我在 IntelliJ 下遇到了这个错误
就我而言,
main
和test
目录不再是IntelliJ中的“模块”。不知道发生了什么...
您可以通过访问
menu -> File -> Project Structure...
来验证这一点
在
modules
左侧导航下,main
和 test
应该是父应用程序下的模块。如果没有,最简单的修复方法是
Menu -> File -> New project from existing source...
并导入为gradle项目否则,您也可以通过转到上面所示的
Project structure...
来重新创建模块。然后在父应用程序下点击 + New Module
,然后选择 Java,并选中 Kotlin 作为模块类型。对 main
和 test
目录执行此操作(确保您的目录在后者中标记为“测试”源目录)
当我尝试使用与我的 Kotlin 版本不匹配的插件版本时,出现此错误:
plugins {
id("org.jetbrains.kotlin.android") version "1.9.10" apply false
// other plugins
kotlin("plugin.serialization") version "1.9.23" apply false
}
一旦我将其更改为匹配并重新同步 Gradle,问题就消失了。
plugins {
id("org.jetbrains.kotlin.android") version "1.9.10" apply false
// other plugins
kotlin("plugin.serialization") version "1.9.10" apply false
}