Gradle 没有看到 "log" 变量定义?

Gradle not seeing "log" variable definition?

Gradle v7.3.3

我正在尝试使用 The Java Platform Plugin,目前我的平台 build.gradle 文件中有这个

artifactId = "my-java-platform"
group = "com.mycompany.platform"
version = "1.0.0"

dependencies {
  constraints {
    ...
    api "org.slf4j:slf4j-log4j12:1.7.9"
    api "org.projectlombok:lombok:1.16.18"
    ...
  }
}

我做了一个 ./gradlew publishToMavenLocal 并查看了生成的 pom.xml 文件以及这两个依赖项。

然后在我的应用程序的 build.gradle 文件中我有

repositories {
    mavenLocal()
    mavenCentral()
}

dependencies {
  implementation platform(group: "com.company.platform", name: "my-java-platform", version: "1.0.0")
  annotationProcessor platform(group: "com.company.platform", name: "my-java-platform", version: "1.0.0")

  compileOnly group: "org.slf4j", name: "slf4j-log4j12"
  compileOnly group: "org.projectlombok", name: "lombok"
  ...
}

我的一个应用程序源代码有

package com.mycompany.common

import java.util.TimeZone;

import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.util.ISO8601DateFormat;
import com.fasterxml.jackson.datatype.guava.GuavaModule;
import com.fasterxml.jackson.datatype.jsr310.JSR310Module;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class ObjectMapperConfiguration {
    private static ObjectMapper objectMapper;

    /**
     * Static only
     */
    private ObjectMapperConfiguration() {}

    /**
     * Work with Spring to configure the ObjectMapper
     */
    public static ObjectMapper objectMapper(Jackson2ObjectMapperBuilder builder) {
        objectMapper = builder.createXmlMapper(false).build();
        configureObjectMapper(objectMapper);
        log.info("The ObjectMapperConfiguration has run");
        return objectMapper;
    }
    ...
}

但我明白了

$ ./gradlew clean build

> Task :compileJava FAILED
/Users/.../src/main/java/com/company/common/ObjectMapperConfiguration.java:39: error: cannot find symbol
        log.info("The ObjectMapperConfiguration has run");
        ^
  symbol:   variable log
  location: class com.company.common.ObjectMapperConfiguration

我明白 log 变量是在 @Slf4j 注释中定义的?如果是这样,为什么我会收到错误消息?谢谢!

Lombok 魔法是通过 annotation processor.

实现的

有关推荐的 Lombok Gradle 配置,请参阅 here

dependencies {
    compileOnly 'org.projectlombok:lombok:1.18.22'
    annotationProcessor 'org.projectlombok:lombok:1.18.22'
    
    testCompileOnly 'org.projectlombok:lombok:1.18.22'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.22'
}

应用程序的 build.gradle 文件,即使用该平台的文件,应如下所示

dependencies {
    implementation platform(group: "com.mycompany.platform", name: "my-java-platform", version: "1.0.0")
    annotationProcessor platform(group: "com.company.platform", name: "my-java-platform", version: "1.0.0")

    annotationProcessor group: "org.projectlombok", name: "lombok"
    ...
}