spring-boot - 由于 lombok,Gradle 构建失败

标签 spring-boot gradle lombok

我正在使用 Gradle 4.10.2(但可以使用最新版本来让它工作)。这是我的gradle文件:

plugins {
    id 'org.springframework.boot' version '2.2.5.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    jcenter()
}

ext {
    set('springCloudVersion', "Hoxton.SR3")
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
    implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    runtime 'org.springframework.boot:spring-boot-devtools'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}
当我执行 bootJar 时,它​​会失败并出现很多错误。这些错误都是由于没有找到由 lombok 自动生成的 getter、setter 等。我该如何解决这些错误?我看过其他关于这个问题的帖子,他们都建议将 lombok 依赖项添加为 annotationProcessorcompileOnly 但我已经这样做了,但仍然有这个问题。
更新
这是我得到的几个错误:
C:\Users\user\eclipse-workspace\example\src\main\java\com\example\proj\service\CarService.java:60: error: cannot find symbol
            log.debug("calling for cars {} ", cars);
            ^
  symbol:   variable log
  location: class CarService
C:\Users\user\eclipse-workspace\example\src\main\java\com\example\proj\service\CarService.java:66: error: cannot find symbol
                CarDtoBuilder dtoBuilder = dtoBuilderByCar.getOrDefault(
                ^
  symbol:   class CarDtoBuilder
  location: class CarService
日志应该来自注释 @Slf4jCarDtoBuilder 来自 CarDto 上注释的 @Builder(builderMethodName = "hiddenBuild")。两者都是 lombok 注释。
更新 2
现在尝试 Gradle 4.10.3。结果相同。这是 gradle -v 的输出:
------------------------------------------------------------
Gradle 4.10.3
------------------------------------------------------------

Build time:   2018-12-05 00:50:54 UTC
Revision:     e76905e3a1034e6f724566aeb985621347ff43bc

Kotlin DSL:   1.0-rc-6
Kotlin:       1.2.61
Groovy:       2.4.15
Ant:          Apache Ant(TM) version 1.9.11 compiled on March 23 2018
JVM:          1.8.0_222 ( 25.222-b10)
OS:           Windows 10 10.0 amd64
更新 3
我已经尝试过使用 Gradle 6 相同的结果。我试过使用 Windows 和 Mac ......结果相同。我尝试使用 JDK 11 而不是 JDK 8 ......结果相同。
更新 4
我正在使用 @Builder lombok 注释。我想知道这是否会导致问题。

最佳答案

我没有看到你的 lombok-plugin build.gradle 文件上的配置。
我必须在我的项目中为 gradle 4.10.3 设置 lombok,这就是我所做的:

group 'io.metadata'
version '1.11-SNAPSHOT'

apply plugin: 'java'

project.ext.set("spring.boot.version", "2.2.6.RELEASE")
project.ext.set("spring.core.version", "5.2.5.RELEASE")

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath("io.freefair.gradle:lombok-plugin:5.0.0-rc4")
    }
}

subprojects {
    repositories {
        mavenLocal()
        mavenCentral()
    }

    apply plugin: 'java'
    apply plugin: 'io.freefair.lombok'
}
查看 apply plugin: 'io.freefair.lombok'以及在 buildscript 上为其定义的依赖项.
请注意,我使用的是多模块项目,但无论哪种方式,您都可以使用 lombok 插件和 apply它。
使用 lombok-plugin 不是强制性的,但它工作得很好而且很容易做到。您可以在此处遵循文档:
https://plugins.gradle.org/plugin/io.freefair.lombok

关于spring-boot - 由于 lombok,Gradle 构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63728641/

相关文章:

java - 如何使用 Spring Boot 在 application.properties 中注入(inject) Maven 配置文件的属性

angular - 使用 Gradle 的 spring bootRun 和 Angular buildWatch

android - Travis CI 错误 : Could not access package manager. 系统是否运行?

java - 如何在lombok的@AllArgsConstructor中指定参数的顺序

java - Lombok +GWT : HandleAccessors failed

logging - 在spring boot应用程序中如何摆脱日志中的AUTO-CONFIGURATION REPORT

java - 如何在 CrudRepository 上使用 findAll() 返回 List 而不是 Iterable

macos - Android Studio 中无法识别路径变量(无法识别 ndk-build 命令)

grails - 当部署为 WAR 时,Grails 3 中不会编译 Less CSS

java - 使用@Builder 的 lombok 中可选数据成员的默认值是什么?