我正在为 Kotlin 开发一个 KSP 注释处理器。代码在编译期间正确生成,我可以在输出目录中看到生成的类。现在我想通过 JUnit 和“com.github.tschuchortdev.KotlinCompilation”测试我的注释处理器。如果我调用 compile 方法,将生成代码,我可以在 Temp-Directory 中看到生成的类,但是如果我尝试加载该类,则会收到“java.lang.ClassNotFoundException:test.pack.TestClassDslBuilder”异常。我希望代码是不言自明的。我的问题是:为什么类没有编译并且不可加载?可能缺少 kompiler 的配置。
@BeforeEach
fun setup() {
val kotlinSource = SourceFile.kotlin(
"TestClass.kt", """
package test.pack
import yy.xxx.dsl.builder.annotation.DslBuilder
@DslBuilder
class TestClass {
}
"""
)
val compilation = KotlinCompilation().apply {
sources = listOf(kotlinSource)
symbolProcessorProviders = listOf(DslBuilderProcessorProvider())
//workingDir =
inheritClassPath = true
verbose = false
//messageOutputStream = System.out
kspIncremental = true
}
compilationResult = compilation.compile()
assertEquals(KotlinCompilation.ExitCode.OK, compilationResult.exitCode)
// The next line leads to java.lang.ClassNotFoundException
compilationResult.classLoader.loadClass("test.pack.TestClassDslBuilder")
}