当我尝试使用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)。
正如@yanex在评论中解释的那样:
不幸的是,Kotlin与Lombok不兼容,因为它使用私有javac API来完成它的工作。虽然kapt3是在Java编译器之上构建的,但kapt为Kotlin类生成Java存根,因此Lombok处理的是存根,而不是原始类。顺便说一句,原来的kapt已被弃用,并将在Kotlin 1.2发布后立即删除。所以你有时间迁移到Kotlin和kapt3。