最近在运行使用lombok.jar
的java项目的时候,总是出现如下所示的cannot find symbol
错误:
另外就是使用mvn install
项目的时候,因为无法实现lombok注解的getter/setter方法而出现JUnit Test无法通过的问题。
网上很多的资料都是老的,中间也走了不少弯路,现在整理如下:
将Lombok升级到1.18.16以上版本
这是因为Lombok 1.18.16之前的版本有一个严重的bug导致IntelliJ无法使用,我在项目中使用的是1.18.22这个版本。
如果是之前版本的lombok,在IDEA中需要添加VM参数:-Djps.track.ap.dependencies=false
,如下图所示:
这里"User-local build process VM options"的优先级比"Shared build process VM options"要高。
Maven项目做如下设置
关键配置如下:
<properties>
<lombok.version>1.18.22</lombok.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<plugins>
</build>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
这样可以保证maven编译的时候可以使用lombok。
安装lombok插件
根据Lombok官方的信息,IntelliJ IDEA 2020.3及以上版本不需要安装lombok插件,但实际测试下来,如果不安装lombok插件的 话,使用IDEA的'Build' - 'Rebuild Project'进行编译的时候会报错。
慎用-javaagent参数
网上很多资料讲到需要添加-javaagent:<lombok_absolute_path>
VM参数,但我使用了1.18.22这个版本之后,不需要这个VM参数了。
事实上,如果在run/debug configurations里面增加这个参数的话,反而运行的时候会出现cannot find symbol
错误。
javac和eclipse编译器
做了上面的设置之后,无论使用javac还是eclipse编译器都不会报错,我的两个编译器的设置如下,供参考:
javac编译器
eclipse编译器