【问题标题】:annotationProcessor gradle 4.7+ configuration doesn't run lombokannotationProcessor gradle 4.7+ 配置不运行 lombok
【发布时间】:2018-11-04 06:13:32
【问题描述】:

我在使用 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

我错过了什么吗?

【问题讨论】:

    标签: gradle lombok


    【解决方案1】:

    添加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 版本)。

    【讨论】:

    • 我认为 lombok 应该是 compileOnlytestCompileOnly,因为注释不应该在运行时可用。请参阅此answer 了解更多信息。
    • 感谢@Brice 的建议,我会试一试并阅读该答案,然后在适当的情况下编辑我的回复:D
    • 我忘了说否则 implementation / compile 将导出 lombok 作为传递依赖或在运行时,这是错误的,因为 lombok 应该只在编译类路径上可用,而不是运行时类路径或 lib 消费者。
    • @coderatchet 非常感谢您的回答。帮助很大
    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 2018-08-06
    • 2018-11-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    相关资源
    最近更新 更多