在创建 gradle 任务的 gradle 插件中使用 kotlinx 序列化
using kotlinx serialization inside a gradle plugin that creates a gradle task
我正在尝试创建一个 gradle 插件,它将从 gradle 任务中生成文件(从数据 classes 序列化),该任务可以 运行 在另一个项目中.
可以说我正在序列化的 classes 标有一些注释 @Annot
并且我在 gradle 任务中找到所有相关的 classes 与反射(我确保依赖于 kotlin compile 以便创建二进制文件)。问题是当我尝试使用
val clazz: Class<*>
clazz.kotlin.serializer()
我得到一个 Serializer for class 'Type' is not found.
(类型是我找到的实际 class,并用 @Serializable
和 @Annot
注释。
我正在使用 gradle 版本 7.2,kotlin 1.5.21(也尝试使用 1.5.31)
使用该插件的项目启用了kotlinx序列化插件
我错过了什么?为什么我不能使用 gradle 任务访问 class 序列化程序?
注意*如果我运行目标项目中的上述代码(而不是在插件中,那么serializer()
函数不会抛出异常
所以这并没有按照我想要的方式工作,但我找到了让它工作的方法。
我定义了一个扩展 JavaExec
task:
的任务
tasks.create(createFilesTaskName, JavaExec::class.java) {
mainClass.set("package.of.file.SchemaKt")
classpath = sourceSets.getByName("main").runtimeClasspath
group = groupName
}
SchemaKt
中的代码在我的kotlin源代码集中,或者在当前项目所需的包中。
serializer()
可以访问并从那里工作,我可以 运行 从 gradle 任务创建模式,这正是我所需要的。
我希望这对以后的人有所帮助。
我正在尝试创建一个 gradle 插件,它将从 gradle 任务中生成文件(从数据 classes 序列化),该任务可以 运行 在另一个项目中.
可以说我正在序列化的 classes 标有一些注释 @Annot
并且我在 gradle 任务中找到所有相关的 classes 与反射(我确保依赖于 kotlin compile 以便创建二进制文件)。问题是当我尝试使用
val clazz: Class<*>
clazz.kotlin.serializer()
我得到一个 Serializer for class 'Type' is not found.
(类型是我找到的实际 class,并用 @Serializable
和 @Annot
注释。
我正在使用 gradle 版本 7.2,kotlin 1.5.21(也尝试使用 1.5.31)
使用该插件的项目启用了kotlinx序列化插件
我错过了什么?为什么我不能使用 gradle 任务访问 class 序列化程序?
注意*如果我运行目标项目中的上述代码(而不是在插件中,那么serializer()
函数不会抛出异常
所以这并没有按照我想要的方式工作,但我找到了让它工作的方法。
我定义了一个扩展 JavaExec
task:
tasks.create(createFilesTaskName, JavaExec::class.java) {
mainClass.set("package.of.file.SchemaKt")
classpath = sourceSets.getByName("main").runtimeClasspath
group = groupName
}
SchemaKt
中的代码在我的kotlin源代码集中,或者在当前项目所需的包中。
serializer()
可以访问并从那里工作,我可以 运行 从 gradle 任务创建模式,这正是我所需要的。
我希望这对以后的人有所帮助。