У меня есть проект, который использует kapt для обработки аннотаций и генерации кода (на основе аннотаций). Он работает в основных источниках, но не в тестовых источниках.
Некоторые источники (например, как использовать kapt в области androidTest ) предлагают запустить 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
но, как вы можете видеть, это не тестовые источники, но основные источники и обработчик аннотации применяются к ним.
Я добавил распечатку в обработчик аннотации. Он появляется для компиляцииKotlin, но не для compileTestKotlin.
Итак, каков волшебный трюк, чтобы сделать работу над тестовыми источниками?
PS: Я думаю, кто-то попросит мой build.gradle. Он идентичен таковому из приведенного мной примера, поэтому, если вы можете заставить его работать для примера, я могу интегрироваться в свой файл сборки.
PPS: Только аналогичный вопрос, который я нашел, – это плагин Kaptlin's kapt для градиента, который не работает для настраиваемого исходного набора (JMH) , и они предлагают выпустить отчет об ошибке. Может быть, это ошибка в kapt-gradle-plugin?
Некоторые источники (например, как использовать kapt в области androidTest) предлагают запустить gradle kaptTest, но это тоже не работает.
Вы неправильно поняли это предложение. Он говорит, что kaptTest
следует использовать вместо kapt
в блоке dependencies
, как описано здесь , а не о том, что вы должны запускать Gradle по-разному. OTOH, в документации также конкретно говорится
Обратите внимание, что kaptAndroidTest и kaptTest расширяет kapt, поэтому вы можете просто предоставить зависимость kapt, и она будет доступна как для источников производства, так и для тестов.
Так что там действительно есть ошибка.
Я связал этот вопрос в https://youtrack.jetbrains.com/issue/KT-21891 . Я не хотел записывать отдельную ошибку, потому что я не знаю, какой плагин Gradle / Kotlin / Kotlin Gradle / и т. Д. ты имел.