【问题标题】:Gradle not seeing "log" variable definition?Gradle没有看到“日志”变量定义?
【发布时间】:2022-01-18 19:37:56
【问题描述】:

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 注释中定义的?如果是这样,为什么我会收到错误消息?谢谢!

【问题讨论】:

    标签: java gradle build.gradle


    【解决方案1】:

    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'
    }
    

    【讨论】:

    • 谢谢。但是,该语法不适合使用 Java 平台插件,其中省略了 version 信息。它确实适用于那里的version 信息,但这违背了使用 Java 平台插件的目的。
    • 我更新了我的 OP,将 annotationProcessor(...) 调用包含在应用程序的 build.gradle 文件中。
    • 您应该将 lombok 添加到 annotationProcessor 配置,但您错误地添加了“com.company.platform.x”
    【解决方案2】:

    应用程序的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"
        ...
    }
    

    【讨论】:

      猜你喜欢
      • 2016-08-29
      • 2022-06-22
      • 1970-01-01
      • 2014-08-03
      • 2014-11-27
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      相关资源
      最近更新 更多