Lombok + Eclipse Compiler
Project Lombok可以通过注解的方式自动在JavaBean中增加gettter/setter及构造方法,使用起来可以减少代码量,非常方便。在Intellij IDEA中使用的时候需要首先安装Lombok插件,并在项目中引入lombok.jar包。
不过当Java编译器选用Eclipse Compiler for Java (ECJ)(不是Eclipse IDE)的时候(如下图所示)会出现一些问题。ECJ相较于javac有更快的编译响应速度,同JRebel一起使用的时候非常方便,更多介绍可以参考这篇What is the difference between javac and the Eclipse compiler?文章。
找不到getXXX或setXXX方法
错误提示如下:
java: The method getXxx() is undefined for the type xxx
项目引入lombok包
如果是Maven项目的话,可以增加下面的依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.16</version>
<scope>provided</scope>
</dependency>
安装Lombok插件
确保已经成功安装了Lombok插件;
勾选Enable annotation processing
进入Preferences
-Build, Executing, Deployment
-Compiler
-Annotation Processors
下面将Enable annotation processing
选项勾选:
设置javaagent(仅限于eclipse编译器,会跟javac编译器冲突)
-javaagent:
后面一定是lombok.jar文件的绝对路径,Mac/Linux下面不支持使用~
表示当前用户主目录,另外还需要注意路径中如果出现空格的话一定要用双引号将其包住,否则会出现Error opening zip file or JAR manifest missing
的错误。
在Mac/Linux系统下可以使用ln命令创建一个软链接,如:
sudo ln -s ~/.m2/repository/org/projectlombok/lombok/1.18.16/lombok-1.18.16.jar /Library/lombok.jar
这样只要设定成 -javaagent:/Library/lombok.jar
就可以了。
接下来有两种方法为编译器设置javaagent:
-
方法一: 在
Preferences
-Build, Executing, Deployment
-Compiler
下面,设置Shared build process VM options:
内如如下:-javaagent:/Library/lombok.jar -Djps.track.ap.dependencies=false
这里需要注意的是,设置好之后,最后对项目重新进行编译。 -
方法二:修改shell的配置文件,如
vim ~/.bash_profile
,加入如下内容:export JAVA_TOOL_OPTIONS="-javaagent:/Library/lombok.jar -Djps.track.ap.dependencies=false"
然后仔细
source ~/.bash_profile
将其生效,这样九设置了一个全局的javac配置项。需要重启一下Intellij IDEA才能生效。
注意:此方法会改变系统全局的设置,可能会跟javac编译器冲突。
出现 cannot find symbol 错误
在使用JRebel运行mvn jetty:run
的时候,会出现cannot find symbol
编译错误,可以点击Build
- Rebuild Project
菜单重新编译之后再运行就正常了,但是几乎每次重新启动的时候都要重新编译,可以在pom.xom文件中对maven-compiler-plugin
进行如下设置:
<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>
记得定义lombok.version
属性。
最后确保在Eclipse Options
中勾选了Proceed on errors
选项:
注意:此设置如果选择javac编译器,执行maven命令之前如果使用clean命令会出现运行错误。
出现 ClassFormatError
详细错误内容如下:
这个其实是lombok插件的一个bug,作者承诺会在下个版本中解决,但在现在的0.34版本中还没有解决这个问题。
所幸有人在Jetbrains 社区中中提到了这个bug ,官方,已经在IDEA 2020.3及之后的版本解决了这个问题(IDEA-254725),可以先将IDEA升级到这个版本之后。
以上的方法都无法解决,请看这里
如果以上的方法依然无法解决你的问题,可以参考Lombok在IntelliJ IDEA下出现cannot find symbol问题的解决 这篇最新的文章。
参考资料:
Lombok annotations do not compile under Intellij idea [duplicate]
Can't compile project when I'm using Lombok under IntelliJ IDEA
“Error opening zip file or JAR manifest missing” when configuring javaagent in IntelliJ
Lombok + Eclipse compiler problem: "java.lang.ClassFormatError: Extra bytes at the end of class file"