【问题标题】:Lombok @getter not working in src/test/java packageLombok @getter 在 src/test/java 包中不起作用
【发布时间】:2019-10-22 16:01:58
【问题描述】:

我已将我的 jdk 从 10 升级到 11,并更新了所有依赖项以使用最新版本。使用 gradle wrapper 编译时会抛出以下错误

symbol: method getId() TestLombok.java:55: error: cannot find symbol object.setId(Long.valueOf(getRandomString(5, onlyNumbers)));

  • Gradle Wrapper 发行版 5.4.1
  • JDK 11.0.2
  • Mac 机
  • 龙目岛 1.18.8

我尝试了各种版本的龙目岛,但无法解决问题

  • 1.18.8
  • 1.18.4

之前我使用的是 lombok 1.18.2 和 annotationprocessor 1.18.2

@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class User {

  @JsonProperty("id")
  public Long id;
}

我希望 gradle5.x.x 版本可以解决这些问题,但问题仍然存在。如果我们在使用 gradle wrapper 版本时遇到任何问题,请告诉我。以下是我的 build.gradle 文件

buildscript {
    ext {
        springBootVersion = '2.1.1.RELEASE'
    }
    repositories {
        mavenCentral()
        jcenter()
        maven { url "https://plugins.gradle.org/m2/" }
        maven { url "https://jitpack.io" }
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
    }
}


apply plugin: "java"
apply plugin: "eclipse"
apply plugin: "org.springframework.boot"

group = "com.demo"
version = "0.0.1-SNAPSHOT"
sourceCompatibility = 11
targetCompatibility = 11

repositories {
    maven { url "https://plugins.gradle.org/m2/" }
    maven { url "http://repo.maven.apache.org/maven2" }
    maven { url "https://repo.spring.io/milestone" }
    maven { url "https://maven.google.com" }
    jcenter()
    mavenCentral()
}

dependencies {
    compile group: 'javax.inject', name: 'javax.inject', version: '1'
    compile("org.springframework.boot:spring-boot-starter-data-jpa")
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-security', version: '2.1.4.RELEASE'
    compile("org.springframework.boot:spring-boot-starter-web")
    compileOnly("org.projectlombok:lombok:1.18.8")
    compile("org.mockito:mockito-core:" + mockitoVersion)
    test.useJUnitPlatform()
    annotationProcessor ('org.projectlombok:lombok:1.18.8')
    testCompileOnly("org.projectlombok:lombok:1.18.8")

}

【问题讨论】:

  • 你能添加你的 gradle 文件吗?
  • 你的 IDE 是什么?一些 IDE 有自己的 lombok 插件,必须升级才能使用。 1.18.4 之后支持 AFAIK Java 11,但这取决于插件是否也支持它。
  • 另外,你能告诉我们课程TestLombok吗?
  • 我已经添加了gradle文件
  • 我没有明确包含任何插件

标签: java gradle lombok java-11


【解决方案1】:

终于可以通过将 gradle 版本升级到 5.6 以及 testCompileOnly '...' 来解决这个问题 testAnnotationProcessor '...'

通过在 build.gradle 文件中添加以上两件事

【讨论】:

    【解决方案2】:

    对于测试源集中的Lombok注解,需要将Lombok添加到两个依赖配置中:

    testCompileOnly '...'
    testAnnotationProcessor '...'
    

    compileOnlyannotationProcessor 一样,第一个使注释对代码可用,第二个在编译期间激活注释处理。

    【讨论】:

    • 我已经检查了这个解决方案,问题仍然存在
    【解决方案3】:

    我刚刚复制了你遇到的同样的问题,我的 gradle 版本是

    Gradle 版本:5.4.1

    为了解决这个问题,参考 Lombok 文档 (https://projectlombok.org/setup/gradle),我将依赖项更改如下。

        compileOnly 'org.projectlombok:lombok:1.18.8'
        annotationProcessor 'org.projectlombok:lombok:1.18.8'
    

    您可以查看https://github.com/rzwitserloot/lombok/issues/1945 了解更多信息

    【讨论】:

    • JDK 版本为 11.0.2。在票证中是 11.0.1
    • 你试过了吗?因为我认为 gradle 导致这个问题不是 JDK。我已经尝试过使用 gradle 低版本 4.10.3 相同的方法,但在 5.x.x 版本中无效
    • 它适用于 4.10.3 任何解决方法使其适用于 5.x.x
    • compileOnly & annotationProcessor 应该适用于 5.x.x
    • 我已经用compileOnly和annotationProcessor都试过了,问题仍然存在
    【解决方案4】:

    您没有发布您的 build.gradle,但我猜您将 Lombok 依赖声明为 compileOnly,这仅适用于主代码。同时声明为testCompileOnly

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 2020-08-02
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多