使用Kotlin 1.0.0版本(在IntelliJ 15中编译) .
println(myPojoInstance.foo)
当它尝试编译引用基于Lombok的POJO的代码(在IntelliJ或Gradle中)时,它会给出错误“无法访问'foo':它在'MyPojo'中是'私有' . 这是真的,它们都是私有的,我的对象有@Value @Builder用于lombok注释 .
我试过专门调用getFoo(),但它说“getFoo的未解析引用” . 也许有一些技巧可以让Kotlin意识到如何处理lombok注释?
4 回答
一般来说,不,它没有 . 这种行为的原因是Lombok是javac的注释处理器,但是当kotlin编译器运行时它也使用javac但没有注释处理,所以这就是为什么kotlin看不到尚未生成的声明 .
现在唯一的解决方法是定义严格的编译顺序:首先是Java,然后是kotlin . 不幸的是,这种方法有很大的缺点:在这种情况下你不能使用Java的Kotlin代码 . 要解决它,您可能需要多模块项目,这可能会导致很多痛苦
正如上面的评论中提到的,delombok有所帮助 . 在maven构建的情况下,它将是:
要添加到Sergey Mashkov 's response (adding here I don'有足够的重复点来评论它,这里是一个Gradle多项目设置的example app,其中Kotlin可以看到Lombok生成的代码(没有kapt或delomboking . 警告确实适用 - 即,Kotlin可以调用Java代码,但Java不能在该特定模块中调用Kotlin代码(因为这将创建循环依赖) . 如果您有现有的Java代码库并且所有新代码都是用Kotlin编写的,那么这种构建可能是合适的 . 但是 .
不过,我很想看到完整的Lombok / Kotlin支持 . 虽然Kotlin可以与Java完全互操作,但事实是Lombok被广泛使用,而这个问题可能会阻止大量想要切换到Kotlin的开发人员这样做 .
看起来如果根据site使用delombok并在build> plugins> plugin> kotlin-maven-plugin下的pom.xml中添加target / generated-sources / delombok文件夹