在构建期间在 gradle 的 buildSrc/ 中序列化 kotlin 数据 class
Serialize kotlin data class in gradle's buildSrc/ during build
我希望在我的 kotlin gradle 应用程序的构建周期中生成 json 文件。我的目的是能够实例化数据 classes 与 public 和私有应用程序配置值的组合,这些配置值被放入构建的资源目录中。
我正在查看 kotlinx.serialization,我想在项目的 buildSrc/
.
中理想地定义这些 classes
我没有在网上找到任何资源来尝试在 gradle 的构建过程中设置序列化,而不仅仅是在运行时为应用程序配置它。这就是我放在一起的 buildSrc/build.gradle.kts
plugins {
`kotlin-dsl`
kotlin("plugin.serialization") version "1.3.72"
}
repositories {
jcenter()
}
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.1.0")
}
这是我的测试数据class:
@Serializable
data class JsonGenerator(val x: String = "")
我得到的错误是:
Cannot access 'Serializable': it is internal in 'kotlin.io'
似乎在未正确声明依赖项时会发生此错误。但我仍然不清楚 buildSrc 是否有限制使这成为不可能。我不喜欢这种方法,但这似乎是最好的解决方案。
编辑:
我已将 buildSrc/build.gradle.kts 更改为:
plugins {
`kotlin-dsl`
}
repositories {
jcenter()
}
dependencies {
implementation(kotlin("serialization"))
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.1")
}
结构:
buildSrc
main
Kotlin
MyTempClass.kt
kt 文件不要嵌套很重要,我认为只有当文件与嵌套目录同名时才有效
我的数据内部 class 文件:
import kotlinx.serialization.*
@Serializable
data class MyTempClass(val name: String)
我有一个序列化的具体实现,没有插件。
然后在顶层 build.gradle.kts,可以访问 MyTempClass
我希望在我的 kotlin gradle 应用程序的构建周期中生成 json 文件。我的目的是能够实例化数据 classes 与 public 和私有应用程序配置值的组合,这些配置值被放入构建的资源目录中。
我正在查看 kotlinx.serialization,我想在项目的 buildSrc/
.
我没有在网上找到任何资源来尝试在 gradle 的构建过程中设置序列化,而不仅仅是在运行时为应用程序配置它。这就是我放在一起的 buildSrc/build.gradle.kts
plugins {
`kotlin-dsl`
kotlin("plugin.serialization") version "1.3.72"
}
repositories {
jcenter()
}
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.1.0")
}
这是我的测试数据class:
@Serializable
data class JsonGenerator(val x: String = "")
我得到的错误是:
Cannot access 'Serializable': it is internal in 'kotlin.io'
似乎在未正确声明依赖项时会发生此错误。但我仍然不清楚 buildSrc 是否有限制使这成为不可能。我不喜欢这种方法,但这似乎是最好的解决方案。
编辑:
我已将 buildSrc/build.gradle.kts 更改为:
plugins {
`kotlin-dsl`
}
repositories {
jcenter()
}
dependencies {
implementation(kotlin("serialization"))
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.0.1")
}
结构:
buildSrc
main
Kotlin
MyTempClass.kt
kt 文件不要嵌套很重要,我认为只有当文件与嵌套目录同名时才有效
我的数据内部 class 文件:
import kotlinx.serialization.*
@Serializable
data class MyTempClass(val name: String)
我有一个序列化的具体实现,没有插件。
然后在顶层 build.gradle.kts,可以访问 MyTempClass