java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Lombok不生效怎么办

Lombok不生效怎么办?排查编译错误与版本兼容问题

作者:howeres

你的Lombok在构建时总报错?可能是版本不兼容或缺少annotationProcessor,本文详解Lombok不生效的常见原因,包括IDEA编译错误、Gradle依赖配置、boolean属性isXXX问题及批量Delombok操作,帮你快速修复Lombok运行问题

Lombok不生效

现象

build/rebuild 时,提示 Lombok 不生效:

java: You aren’t using a compiler supported by lombok, so lombok will not work and has been disabled.

java: JPS incremental annotation processing is disabled. Compilation results on partial recompilation may be inaccurate. Use build process "jps.track.ap.dependencies" VM flag to enable/disable incremental annotation processing environment.

第二种显示,附加代码的注解会失效,通过设置属性 -Djps.track.ap.dependencies 来启用或禁用(通常的解决办法是设为 false)

原因

使用的lombok版本和idea版本不兼容。idea新版本是使用代理的方式来进行编译。(IDE层面的问题,通常是不推荐修改的)

解决办法

升级lombok版本为最新版~

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.22</version>
    <scope>provided</scope>
</dependency>

多模块项目的所有 lombok 都应该进行升级

原始类型boolean下isXXX不生效

原始类型的布尔类型中的 get() 方法是由 is 开头的 (Java Beans 规定)

@Data
public class TestBody {
	private boolean flag;
	private boolean flag0;
	private boolean isFlag1; // 会生成 isFlag1() 方法, 变相忽略掉了 is 前缀
	private Boolean flag2;

	public boolean isFlag0() {
		return flag0;
	}

	public void setFlag0(boolean flag0) {
		this.flag0 = flag0;
	}
}

Gradle 下 Lombok 不生效

Gradle 相比 Maven 需要再补充一个依赖项, 叫 annotationProcessor

repositories {
	mavenCentral()
}
dependencies {
	compileOnly 'org.projectlombok:lombok:1.18.32'
	annotationProcessor 'org.projectlombok:lombok:1.18.32' // add
	
	testCompileOnly 'org.projectlombok:lombok:1.18.32' // 测试的需要单独加入
	testAnnotationProcessor 'org.projectlombok:lombok:1.18.32' // add 测试的需要单独加入
}

批量 Delombok

操作方法比较隐蔽, 记录一下

在 idea 中可以选中包名 (路径), 然后将该包下的所有使用 Lombok 注解的类, 转换为普通类,

  1. 选中包名
  2. Ctrl+Shift+A 调出 Action 面板
  3. 输入 delombok
  4. 选中 all lombok annotations

Gradle下发布源码包报错

Library source does not match the bytecode for class XXX

解决方法是改用插件方式引入 lombok (之前是依赖方式)

plugins {
  id "io.freefair.lombok" version "8.6"
}

(如果找不到依赖, 使用下面的方式加镜像)

buildscript {
  repositories {
    maven {
      url "https://plugins.gradle.org/m2/"
    }
  }
  dependencies {
    classpath "io.freefair.gradle:lombok-plugin:8.6"
  }
}

apply plugin: "io.freefair.lombok"

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文