由于龙目岛,Gradle构建失败

问题描述

我正在使用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来自@Builder(builderMethodName = "hiddenBuild"),并在CarDto上进行了注释。两者都是龙目岛注释。

更新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龙目岛注释。我不知道这是否会引起问题。

解决方法

在build.gradle文件中看不到您的lombok-plugin配置。

我必须在我的项目中为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插件不是强制性的,但效果很好,而且很容易做到。您可以在此处遵循文档: https://plugins.gradle.org/plugin/io.freefair.lombok

,

删除对涉及lombok生成的代码的静态导入的任何引用。就我而言,我有:

import static com.example.car.dto.CarDto.CarDtoBuilder;

CarDtoBuilder是通过@Builder类的lombok CarDto生成的。解决后,其他lobmok编译相关问题(例如,未找到log创建的@Slf4j符号)就消失了。