Kotlin没有看到Java Lombok访问器?

使用Kotlin 1.0.0版本(在IntelliJ 15中编译)。

println(myPojoInstance.foo) 

当它试图编译引用基于Lombok的POJO的代码(在IntelliJ或Gradle中)时,它会给出错误“Can not access'foo':它是'MyPojo'中的'private'。这是真的,它们都是私有的,有@Value @Builder的lombok注释。

我试着专门调用getFoo(),但它说“getFoo的未解决的参考”。 让Kotlin意识到如何处理lombok注释也许有一些窍门?

一般来说,不,不。 这种行为的原因是Lombok是javac的注释处理器,但是当kotlin编译器运行时,它也使用javac,但是没有注释处理,所以这就是为什么kotlin看不到尚未生成的声明的原因。

现在唯一的解决方法是定义严格的编译顺序:首先是Java,然后是kotlin。 不幸的是,这种方法有很大的缺点:在这种情况下,你不能使用Java的Kotlin代码。 要解决它,你可能需要multimodule项目,可能会造成很大的痛苦

正如上面的评论中提到的,delombok有帮助。 在maven构建的情况下,将是:

 <plugin> <groupId>org.projectlombok</groupId> <artifactId>lombok-maven-plugin</artifactId> <version>${lombok.version}.0</version> <executions> <execution> <id>delombok</id> <phase>generate-sources</phase> <goals> <goal>delombok</goal> </goals> <configuration> <formatPreferences> <javaLangAsFQN>skip</javaLangAsFQN> </formatPreferences> <verbose>true</verbose> </configuration> </execution> <execution> <id>test-delombok</id> <phase>generate-test-sources</phase> <goals> <goal>testDelombok</goal> </goals> <configuration> <verbose>true</verbose> </configuration> </execution> </executions> </plugin>