kapt:如何处理测试资源?

我有一个使用kapt进行注释处理和代码生成的项目(基于注释)。 它在主要来源工作,但不在测试来源。

有些来源(例如如何在androidTest范围中使用kapt )建议运行gradle kaptTest ,但是这也不起作用。 它将任务报告为“最新”,甚至在清理干净之后。 也许这个建议是唯一的android。

我从https://github.com/JetBrains/kotlin-examples/tree/master/gradle/kotlin-code-generation下载了示例项目,在测试源中添加了一个注释用法,我在那里得到了相同的行为。 它适用于主要来源,不适用于测试来源。

输出中唯一奇怪的是:

 > Task :example:compileKotlin Using kotlin incremental compilation w: [kapt] Sources output directory is not specified, skipping annotation processing 

但是正如你所看到的,这不是测试来源,而是主要来源,而注释处理器就是应用在那些上。

我在注释处理器中添加了一个打印输出。 它显示为compileKotlin,但不是compileTestKotlin。

那么,使kapt在测试源上工作的魔术是什么?

PS:我想有人会问我的build.gradle。 这与我链接的例子是一样的,所以如果你能使它适用于这个例子,我可以集成到我的构建文件中。

PPS:我发现只有类似的问题是Kotlin的kapt插件for gradle不能用于自定义源集(JMH) ,他们建议发布一个bug报告。 所以也许这是kapt-gradle-plugin中的一个bug?

有些来源(例如如何在androidTest范围中使用kapt)建议运行gradle kaptTest,但是这也不起作用。

你误解了这个建议。 它表示应该使用kaptTest来代替dependencies块中的kapt ,正如这里所描述的那样,而不是你应该以不同的方式运行Gradle。 OTOH,文档还特别说

请注意,kaptAndroidTest和kaptTest扩展了kapt,所以您可以只提供kapt依赖关系,它可以用于生产源和测试。

所以那里似乎确实有一个bug。

我已经在https://youtrack.jetbrains.com/issue/KT-21891链接了这个问题。 我不想提出一个单独的错误,因为我不知道哪个Gradle / Kotlin / Kotlin Gradle插件/等等。 你有过。