如何在 Kapt3 中使用 lombok

How to use lombok with Kapt3

当我在使用 Kapt3 时尝试 运行 Java/Kotlin android 应用程序与 Lombok:

apply plugin: 'kotlin-kapt'

javac 编译失败,出现多个

error: cannot find symbol

对于生成的方法。

可能是kapt无法生成stubs造成的:

  'kapt.generateStubs' is not used by the 'kotlin-kapt' plugin

上述所有内容迫使我在可以使用的地方使用较旧的 kapt:

compileOnly "org.projectlombok:lombok:$lombokVer"
annotationProcessor "org.projectlombok:lombok:$lombokVer"
kapt "org.projectlombok:lombok:$lombokVer"

kapt {
    generateStubs = true
}

但是这会导致测试编译失败,因为我也在使用数据绑定库:

What went wrong: Execution failed for task ':app:compileXDebugUnitTestJavaWithJavac'. java.lang.RuntimeException: Failed to parse data binding compiler options. Params: kapt.annotations : ...\app\build\tmp\kapt\xDebugUnitTest\wrappers\annotations.bscplayDebugUnitTest.txt kapt.kotlin.generated : ...\app\build\tmp\kapt\xDebugUnitTest\kotlinGenerated

另一方面,这迫使我按照此处所述使用 Kapt3:

有谁知道如何用 Lombok 解决这个问题? 我只是提示使用我的第一个解决方案,但它导致了数据绑定问题(根据 Kotlin Support · Issue #1169 · rzwitserloot/lombok · GitHub)

注意:Android studio 2.3.3 和 Android Studio 3(使用 gradle 构建工具 3.0.0)的情况相同。

正如@yanex 在评论中所解释的那样:

Unfortunately, Kotlin is incompatible with Lombok because it uses the private javac API do to its job. Although kapt3 is built on top of the Java compiler, kapt generates Java stubs for Kotlin classes so what can Lombok process is the stubs, not the original classes. By the way, the original kapt is deprecated and will be removed soon after the Kotlin 1.2 release. So you have some time to migrate to Kotlin & kapt3.

在您的 build.gradle 中添加:

kapt {
    keepJavacAnnotationProcessors = true
}

有关详细信息,请查看 JetBrains Kotlin documentation