如何使用Lombok与Kapt3

问题描述 投票:3回答:1

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

apply plugin: 'kotlin-kapt'

javac编译失败了很多

error: cannot find symbol

对于生成的方法。

这可能是由kapt无法生成存根引起的:

  '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)。

java android data-binding kotlin lombok
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.