lombok으로 인한 Gradle 빌드 실패

Sep 04 2020

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 종속성을 annotationProcessor& 로 추가하는 것이 좋지만 compileOnly이미이 작업을 수행했으며 여전히이 문제가 있습니다.

최신 정보

다음은 몇 가지 오류입니다.

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

로그는 주석에서 가져와야 @Slf4j합니다. 그리고는 CarDtoBuilder으로부터 @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 8 대신 JDK 11을 사용해 보았습니다. 같은 결과입니다.

업데이트 4

내가 사용하고 @Builder롬복 주석을. 그것이 문제를 일으키는 지 궁금합니다.

답변

2 FedericoPiazza Sep 04 2020 at 04:25

lombok-pluginbuild.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

user8297969 Sep 04 2020 at 07:11

lombok에서 생성 한 코드와 관련된 정적 가져 오기에 대한 모든 참조를 제거합니다. 제 경우에는 :

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

CarDtoBuilder수업에서 lombok @Builder을 통해 생성되었습니다 CarDto. 해결되면 log기호를 찾을 수 없음 (에서 생성됨 @Slf4j) 과 같은 다른 lobmok 컴파일 관련 문제 가 사라집니다.