gradle - annotationProcessor gradle 4.7+ 配置不运行 lombok

标签 gradle lombok

我在使用 gradle 4.7 项目时收到以下消息

The following annotation processors were detected on the compile classpath: 'lombok.launch.AnnotationProcessorHider$AnnotationProcessor' and 'lombok.launch.AnnotationProcessorHider$ClaimingProcessor'. Detecting annotation processors on the compile classpath is
Deprecated and Gradle 5.0 will ignore them. Please add them to the annotation processor path instead. If you did not intend to use annotation processors, you can use the '-proc:none' compiler argument to ignore them.

运行时

gradlew build --warning-mode=all

在具有以下 Gradle 配置的项目上

compileOnly('org.projectlombok:lombok')
testCompileOnly('org.projectlombok:lombok')

正如警告所示,建议将它们放在 annotationProcessor (和 testAnnotationProcessor)配置上,以便与 gradle 5.0 兼容

annotationProcessor('org.projectlombok:lombok')
testAnnotationProcessor('org.projectlombok:lombok')

但是,通过一个简单的测试:

@Slf4j
public class LombokTests {
    @Test
    public void lombokCompiles() {
        log.info("foobar");
    }
}

该配置失败:

> Task :compileTestJava FAILED
D:\Users\bobjones\repos\my-new-app\src\test\java\com\example\app\LombokTests.java:10: error: cannot find symbol
@Slf4j
 ^
  symbol: class Slf4j
1 error

我错过了什么吗?

最佳答案

添加compileOnly/testCompileOnly配置

annotationProcessor('org.projectlombok:lombok')
compileOnly('org.projectlombok:lombok')
testAnnotationProcessor('org.projectlombok:lombok')
testCompileOnly('org.projectlombok:lombok')
<小时/>

根据documentation ,annotationProcessor 配置仍然需要 compileOnly (以及用于测试类的 testCompileOnly)配置才能运行。至于对增量注释处理的支持,Lombok 的实现者刚刚合并了对 master 的支持,但截至 2018 年 5 月 25 日尚未包含上线版本。

他们的最后一个版本 16.2.20 跨越提交直到 9th of Jan 2018 Gradle 更改已被拉入 15th of May 2018 上的 master 中所以我怀疑新版本距离发布不会太远,尽管他们的'Edgy'发行版不包含有关此功能的任何注释。

编辑 2020 年 10 月:

一个Gradle plugin is available by io.freefair它可以自动配置这些设置,并帮助使 lombok 保持最新(当然您可以自己覆盖 lombok 版本)。

关于gradle - annotationProcessor gradle 4.7+ 配置不运行 lombok,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50519138/

相关文章:

java - 未报告的异常必须被捕获或声明为抛出 :

java - Jackson 解析类不起作用

eclipse - Project Lombok 是否与 Scala 配合良好?

rest - Docker - 复制 JAR 文件 : no such file or directory?

gradle - 如何在 Gradle 中复制目录并保留符号链接(symbolic link)?

android - 任务的Gradle执行失败

Android Studio 项目结构打开失败

java - 错误 ClientBuilder() is not public in com.company.entities.Client.ClientBuilder;无法从外部包访问

java - 如果某些字段未给出,即使标记为 @NonNull,Gson.fromJson 也不会失败

jar - 如何使用Android Studio生成jar库(Gradle)