在创建 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 任务创建模式,这正是我所需要的。

我希望这对以后的人有所帮助。