Gradle 由于 lombok,构建失败
Gradle build fails due to 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 依赖项添加为 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
来自 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 注释。我想知道这是否会导致问题。
我在你的 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-plugin 不是强制性的,但效果很好,而且很容易做到。您可以按照此处的文档进行操作:
https://plugins.gradle.org/plugin/io.freefair.lombok
删除对涉及 lombok 生成的代码的静态导入的所有引用。就我而言,我有:
import static com.example.car.dto.CarDto.CarDtoBuilder;
CarDtoBuilder
是通过 CarDto
class 上的 lombok @Builder
生成的。一旦解决,其他与 lobmok 编译相关的问题,例如 log
未找到符号(由 @Slf4j
创建)就会消失。
我使用的是 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
来自 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 注释。我想知道这是否会导致问题。
我在你的 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-plugin 不是强制性的,但效果很好,而且很容易做到。您可以按照此处的文档进行操作: https://plugins.gradle.org/plugin/io.freefair.lombok
删除对涉及 lombok 生成的代码的静态导入的所有引用。就我而言,我有:
import static com.example.car.dto.CarDto.CarDtoBuilder;
CarDtoBuilder
是通过 CarDto
class 上的 lombok @Builder
生成的。一旦解决,其他与 lobmok 编译相关的问题,例如 log
未找到符号(由 @Slf4j
创建)就会消失。