Vert.x @ProxyGen注解在使用IDEA构建时报错

187 阅读1分钟

在使用vertx-codegen的@ProxyGen注解自动生成代码的时候,发现IDEA在编译的时候报错:
java: Could not generate element for DeliveryAsyncService: null

image.png

可以确定这是Vertx提供的注解编译器有缺陷,但我发现在使用2020.2之前版本的IDEA可以正常编译通过,但是在2020.2之后版本的IDEA会编译报错。
经过一番搜索后发现,从 2020.3 开始,IntelliJ 团队对注解处理器的增量编译进行了改进。
那既然无法改变Vertx的注释编译器,在Vertx修复此问题之前,我们可以通过改变IDEA,来变相达到我们的目的,使编译正常通过。

解决的方式有两种:

  1. 将构建操作委托给Maven,如图所示,在箭头所指方向勾选,将构建/运行操作委托给Maven,但要注意,该方法虽然有效,但是构建的速度会较慢

image.png

  1. (推荐)通过设置IDEA的虚拟机参数,来强制IDEA使用2020.2之前版本的注释处理器,在默认情况下,此参数为True
-Djps.track.ap.dependencies=false

image.png

以上两种方式都可以使用,但是使用方法1的编译速度会比IDEA自身的编译速度慢,建议使用方法2