【问题标题】:How to use lombok with Kapt3如何在 Kapt3 中使用 lombok
【发布时间】:2018-04-07 15:07:57
【问题描述】:

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

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
}

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

出了什么问题: 任务 ':app:compileXDebugUnitTestJavaWithJavac' 执行失败。 java.lang.RuntimeException:无法解析数据绑定编译器选项。参数: kapt.annotations : ...\app\build\tmp\kapt\xDebugUnitTest\wrappers\annotations.bscplayDebugUnitTest.txt kapt.kotlin.generated : ...\app\build\tmp\kapt\xDebugUnitTest\kotlinGenerated

另一方面,这迫使我使用 Kapt3,如下所述: android databinding unit test error Failed to parse data binding compiler options.

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

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

【问题讨论】:

  • 为什么还要在 kotlin 上使用 lombok?在使用 kotlin 时,没有什么可以增强使用 lombok 的代码
  • 它实际上是 Java/Kotlin 模块,其中许多类仍然用 Java 编写,其中仍然使用 Lombok。当整个项目迁移到 Kotlin 时,我当然不打算使用 Lombok(我希望很快,但范围很大)。
  • 如果没有时间将不好的模式/代码转换成好的模式/代码,那么“大”项目就不可能大:)
  • 所有新代码都是用 kotlin 编写的,而旧代码正在按需迁移,因为我们无法一次迁移整个项目(大量冲突,可能是一些不当行为)。最好一步一步转换。此外,做出如此巨大的改变不仅取决于我,还有团队的其他成员:) 如果这是一种可能性,我什至不会一开始就问这样的问题 :)
  • 不幸的是,Kotlin 与 Lombok 不兼容,因为它使用私有 javac API 来完成其工作。虽然 kapt3 构建在 Java 编译器之上,但 kapt 会为 Kotlin 类生成 Java 存根,因此 Lombok 可以处理的是存根,而不是原始类。顺便说一句,原来的 kapt 已被弃用,并将在 Kotlin 1.2 发布后不久被删除。所以你有一些时间迁移到 Kotlin 和 kapt3。

标签: java android data-binding kotlin lombok


【解决方案1】:

正如@yanex 在 cmets 中解释的那样:

不幸的是,Kotlin 与 Lombok 不兼容,因为它使用私有 javac API 来完成其工作。虽然 kapt3 构建在 Java 编译器之上,但 kapt 会为 Kotlin 类生成 Java 存根,因此 Lombok 可以处理的是存根,而不是原始类。顺便说一句,原来的 kapt 已被弃用,并将在 Kotlin 1.2 发布后不久被删除。所以你有一些时间迁移到 Kotlin & kapt3。

【讨论】:

    猜你喜欢
    • 2022-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2019-11-16
    相关资源
    最近更新 更多