kapt:如何处理测试源?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kapt:如何处理测试源?相关的知识,希望对你有一定的参考价值。

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

一些消息来源(例如how to use kapt in androidTest scope)建议运行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's kapt plugin for gradle does not work for custom source set (JMH),他们建议发布错误报告。也许这是kapt-gradle-plugin中的一个错误?

答案

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

你误解了这个建议。它说kaptTest应该用来代替kapt区块中的dependencies,如here所述,并不是说你应该以不同的方式运行Gradle。 OTOH,文档也特别说

请注意,kaptAndroidTest和kaptTest扩展了kapt,因此您只需提供kapt依赖项,它就可用于生产源和测试。

所以确实有一个错误。

我在https://youtrack.jetbrains.com/issue/KT-21891中将这个问题联系起来。我不想提交单独的bug,因为我不知道哪个Gradle / Kotlin / Kotlin Gradle插件/等。你有过。

以上是关于kapt:如何处理测试源?的主要内容,如果未能解决你的问题,请参考以下文章

在片段之间切换时如何处理相机?

如何处理片段和活动中的后压

如何处理错误?

如何处理片段中的onClick [重复]

如何处理片段上的触摸事件?

如何处理单个活动的多个片段