记录一个Lombok,在jdk10下面无法启动的问题,lombok.javac.apt.LombokProcessor could not be initialized.

0x00 - 还是废话不多说了,标题佛性一点
lombok版本: 1.16.20
maven配置如下

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>10</source>
                <target>10</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok-maven-plugin</artifactId>
            <version>1.16.20.0</version>
        </plugin>
    </plugins>
</build>

IDEA 项目配置JDK版本为JDK10。

排坑的时候发现如果不配置maven-compiler-plugin,项目是可以启动的。
如果配置了maven-compiler-plugin,启动项目的时候,会抛出一个警告

Warning:(18, 8) java: lombok.javac.apt.LombokProcessor could not be initialized. Lombok will not run during this compilation: java.lang.IllegalArgumentException: com.sun.tools.javac.main.DelegatingJavaFileManager$DelegatingSJFM extends com.sun.tools.javac.main.DelegatingJavaFileManager implements javax.tools.StandardJavaFileManager
  	at lombok.javac.apt.LombokFileObjects.getCompiler(LombokFileObjects.java:148)
  	at lombok.javac.apt.InterceptingJavaFileManager.<init>(InterceptingJavaFileManager.java:40)
  	at lombok.javac.apt.LombokProcessor.placePostCompileAndDontMakeForceRoundDummiesHook(LombokProcessor.java:165)
  	at lombok.javac.apt.LombokProcessor.init(LombokProcessor.java:87)
  	at lombok.core.AnnotationProcessor$JavacDescriptor.want(AnnotationProcessor.java:87)
  	at lombok.core.AnnotationProcessor.init(AnnotationProcessor.java:140)
  	at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.init(AnnotationProcessor.java:69)
  	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:674)
  	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:771)
  	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:866)
  	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2100(JavacProcessingEnvironment.java:110)
  	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1202)
  	at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1311)
  	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1250)
  	at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:928)
  	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:100)
  	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:142)
  	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:96)
  	at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:90)
  	at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:198)
  	at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:453)
  	at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:317)
  	at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:244)
  	at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:202)
  	at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1314)
  	at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:991)
  	at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1063)
  	at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:954)
  	at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:787)
  	at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:376)
  	at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:183)
  	at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:138)
  	at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:308)
  	at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:137)
  	at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:235)
  	at org.jetbrains.jps.service.impl.SharedThreadPoolImpl.lambda$executeOnPooledThread$0(SharedThreadPoolImpl.java:42)
  	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:514)
  	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
  	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135)
  	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
  	at java.base/java.lang.Thread.run(Thread.java:844)

然后提示

Error:(27, 37) java: 找不到符号
  符号:   方法 builder()
  位置: 类 com.tooldin.cms.core.entity.TestEntity

对,没错,你发现的lombok,在编译器也不会抛红,就是运行不起来,什么找到不到符号,getXXX(),setXXX()找不到,都是类似的,抛出lombok.javac.apt.LombokProcessor could not be initialized. Lombok will not run during this compilation: java.lang.IllegalArgumentException

0x01 - 解决方案
方案一:
毕竟我算是在尝鲜,所以解决方案1就是,把JDK降回JDK1.8,据说JDK1.9,也会有问题。

方案二:
升级Lombok,stackoverflow大神说可以升级到1.16.21,但毕竟我此时此刻在http://mvnrepository.com/ 并没有,有需要的可以在https://www.projectlombok.org/download-edge下载,version: 1.16.21 (2018-05-04 11:49:59 UTC)。嗯,我发布这篇文章是2018-05-16 20:00:01,所以我先用方案一解决了。祝大家愉快~

在这里插入图片描述

<think>我们正在处理关于Lombok编译时注解处理的问题。用户提到了"LombokProcessor in lombok.javac.apt",这通常与Java编译时的注解处理有关。用户可能遇到了Lombok在编译时没有正确工作的问题,比如注解(如@Getter, @Setter)没有生成预期的代码。 根据引用[1],我们看到一个常见的Lombok问题是版本不兼容。因此,我们首先应该检查Lombok版本是否与Java版本或构建工具(如Maven、Gradle)兼容。 此外,引用[2]提到了Spring的@Autowired注解,但这个问题主要与Lombok相关,所以我们先专注于Lombok的配置。 常见的解决步骤包括: 1. 确保使用兼容的Lombok版本。 2. 检查IDE中是否启用了注解处理(对于IntelliJ IDEA,需要安装Lombok插件并启用注解处理)。 3. 对于Maven项目,确保在pom.xml中正确配置了Lombok依赖,并且作用域为provided。 4. 检查编译器配置,确保注解处理已启用。 由于用户提到了具体的类名`lombok.javac.apt.LombokProcessor`,这通常出现在注解处理器的配置中。在Maven中,我们可以通过配置`maven-compiler-plugin`来指定注解处理器。 下面一个配置示例: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.8</version> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build> ``` 对于Gradle,可以在`build.gradle`中添加: ```groovy dependencies { compileOnly &#39;org.projectlombok:lombok:1.18.8&#39; annotationProcessor &#39;org.projectlombok:lombok:1.18.8&#39; } ``` 如果问题仍然存在,可能需要检查IDE的配置。例如,在IntelliJ IDEA中: - 安装Lombok插件(如果尚未安装)。 - 启用注解处理:Settings -> Build, Execution, Deployment -> Compiler -> Annotation Processors -> 勾选"Enable annotation processing"。 如果用户是在Eclipse中,确保安装了Lombok(通常是通过运行lombok.jar来安装)并启用了注解处理。 最后,如果用户遇到特定的错误信息,请提供具体的错误日志,以便更精确地定位问题。 现在,根据要求,我们需要生成相关问题。</think>### Lombok 编译时注解处理问题解析 Lombok 的 `LombokProcessor` 是 Java 编译时注解处理的核心组件,位于 `lombok.javac.apt` 包中。常见问题及解决方案如下: #### 1. **注解处理器未启用** - **现象**:编译时 Lombok 注解(如 `@Data`)未生成代码 - **解决**:显式配置注解处理器路径 ```xml <!-- Maven 配置示例 --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <annotationProcessorPaths> <path> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <!-- 匹配项目版本 --> </path> </annotationProcessorPaths> </configuration> </plugin> </plugins> </build> ``` Gradle 配置: ```groovy dependencies { compileOnly &#39;org.projectlombok:lombok:1.18.30&#39; annotationProcessor &#39;org.projectlombok:lombok:1.18.30&#39; } ``` #### 2. **版本冲突** - **关键点**:Lombok 版本需与 JDK 和构建工具兼容 - JDK 8 → Lombok1.18.x - JDK 11+ → Lombok1.18.10 - **验证**:检查依赖树是否有冲突 ```bash mvn dependency:tree | grep lombok ``` #### 3. **IDE 特定问题** - **IntelliJ**: 1. 安装 Lombok 插件 2. 启用注解处理: `Settings > Build > Compiler > Annotation Processors > ✔ Enable annotation processing` - **Eclipse**: 1. 将 `lombok.jar` 添加到注解处理器路径 2. 检查 `.project` 文件是否包含: ```xml <buildCommand> <name>org.eclipse.jdt.core.javabuilder</name> <arguments> <argument>-proc:only</argument> </arguments> </buildCommand> ``` #### 4. **处理器注册问题** - 手动注册(不推荐,仅备用): ```bash javac -processorpath lombok.jar -processor lombok.launch.AnnotationProcessorHider$AnnotationProcessor ... ``` > **重要提示**:若出现 `lombok.javac.apt.LombokProcessor` 未找到错误,通常表明: > 1. Lombok 依赖未正确传递到注解处理器路径[^1] > 2. JDK 工具链配置错误(检查 `JAVA_HOME` 指向正确 JDK) > 3. 多模块项目中子模块未继承父 POM 配置
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值