Lombok在IntelliJ IDEA下出现cannot find symbol问题的解决

最近在运行使用lombok.jar的java项目的时候,总是出现如下所示的cannot find symbol错误:

file

另外就是使用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 ,如下图所示:
file

这里"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错误。
file

javac和eclipse编译器

做了上面的设置之后,无论使用javac还是eclipse编译器都不会报错,我的两个编译器的设置如下,供参考:

javac编译器
file

eclipse编译器

file

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注