Spring boot 由于lombok,Gradle构建失败
我使用的是Gradle4.10.2(但如果使用最新版本就可以了)。这是我的gradle文件:Spring boot 由于lombok,Gradle构建失败,spring-boot,gradle,lombok,Spring Boot,Gradle,Lombok,我使用的是Gradle4.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' sour
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”)
。两者都是龙目山注释
更新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插件
配置
我不得不在gradle 4.10.3的项目中设置lombok,我就是这么做的:
组“io.metadata”
版本“1.11-SNAPSHOT”
应用插件:“java”
project.ext.set(“spring.boot.version”、“2.2.6.RELEASE”)
project.ext.set(“spring.core.version”、“5.2.5.RELEASE”)
构建脚本{
存储库{
马文{
url“https://plugins.gradle.org/m2/"
}
}
依赖关系{
类路径(“io.freefair.gradle:lombok插件:5.0.0-rc4”)
}
}
子项目{
存储库{
mavenLocal()
mavenCentral()
}
应用插件:“java”
应用插件:“io.freefair.lombok”
}
检查apply插件:“io.freefair.lombok”
以及在buildscript
上为其定义的依赖项
请注意,我使用的是多模块项目,但无论哪种方式,您都可以使用lombok插件并应用它
它不是强制性使用lombok插件,但它工作得很好,而且很容易做到。您可以按照以下文档操作:
删除对涉及lombok生成的代码的静态导入的任何引用。就我而言,我有:
import static com.example.car.dto.CarDto.CarDtoBuilder;
CarDtoBuilder
是通过CarDto
类上的lombok@Builder
生成的。解决后,其他与lobmok编译相关的问题,如未找到符号(由@Slf4j
创建)将消失。如果您使用的是基于Eclipse/Eclipse的IDE,请尝试此方法-我使用的是Eclipse和BuildShip。使用IDE和引导仪表板,一切都可以很好地编译。只有当使用buildship发出bootJar
时,它才会失败。我刚刚在命令行中使用gradle bootJar
尝试了同样的问题。使用的是哪一个版本的Lombok?对于最新版本1.18,它应该可以工作。否则会有更多的建议。@flaxel-LombokV1.18.12。谢谢你的链接。现在看一看。我在尝试使用该插件时出错:应用插件请求[id:'io.freefair.lombok',版本:'5.1.1']时发生异常,未能应用插件[class'io.freefair.gradle.plugins.lombok.LombokBasePlugin']无法为class io.freefair.gradle.plugins.LombokExtension]生成代理类。org/gradle/api/provider/MapProperty
@user8297969尝试使用较低版本(我在答案中发布的版本),您使用的是最新的插件版本,但您的gradle是4.10.3我会尝试,但我不确定为什么我的其他项目没有插件。我也不介意使用gradle 6或其他更新的版本。你的帖子说它使用了4.10.3。你想让我试试哪个版本?@user8297969好吧。。。使用最新版本总是很好的。请记住,如果您使用gradle 4.10.3,您将需要与该版本兼容的lombok插件。在我的回答中,我发布了带有兼容插件的gradle4.10.3
。你可以使用我的这个配置,因为我知道它可以工作(我正在使用它),一旦你让它工作,你可以升级gradle/插件到最新版本。我尝试过使用最新的gradle版本,它允许使用插件{id“iofreefir.lombok”version“5.1.1”}
。但我得到同样的编译错误。我正在使用插件
,因此不确定如何使用应用插件
。这给了我一个错误。