【问题标题】:Gradle build fails on Lombok annotated classes龙目岛注释类的 Gradle 构建失败
【发布时间】:2016-02-06 01:06:42
【问题描述】:

我有一个 JHipster 项目,我在 build.gradle 中添加了 Lombok 的依赖项:

compile group: 'org.projectlombok', name: 'lombok', version: lombok_version

我已经为 IntelliJ 停止了 Lombok 插件。我在 IntelliJ 中打开了注释处理,我可以从 IntelliJ IDE 构建而没有错误,但是当我尝试从命令行构建时,我得到了构建错误。 Gradle 似乎没有处理注释,也找不到 getter/setter 和 log 声明。该项目也运行没有任何错误。

命令行:

./gradlew build

错误:

/Users/.../source/v4.0/src/main/java/com/.../service/MyService.java:145: error: cannot find symbol
        log.info("Security Context: " + SecurityUtils.getCurrentUserLogin());
        ^
  symbol:   variable log
  location: class MyService

错误:

/Users/.../source/v4.0/src/main/java/com/.../service/MyService.java:105: error: cannot find symbol
        myClass.setDescription(description);
                        ^
  symbol:   method setDescription(String)
  location: variable myClass of type MyClass

服务类:

import lombok.extern.slf4j.Slf4j; 
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class MyService {      
    public void someMethod(){
        log.debug("Security Context: " + SecurityUtils.getCurrentUserLogin());
        MyClass myCLass = new MyClass();
        myClass.setDescription(description);
    }
}

实体类:

import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import javax.persistence.Entity;
import javax.persistence.Table;

@Entity
@Table(name="t_juror_file_update")
@Getter
@Setter
@NoArgsConstructor
public class MyClass {

    private String description;

}

我已经尝试了好几个小时,但完全卡住了。任何帮助将不胜感激。

【问题讨论】:

  • 你能发布你的 SecurityUtils 课程吗?
  • 你是否也包含了对 SLF4J 的依赖?
  • 感谢 Ethan 和 Roel 的回复。我添加了更多细节以显示我在 getter/setter 和日志声明上遇到编译错误。我不认为它特定于 SecureUtils 类。我有一个编译组:'org.springframework.boot',名称:'spring-boot-starter-logging'正在提供 SLF4J。

标签: intellij-idea gradle jhipster lombok


【解决方案1】:

添加到 build.gradle 时我遇到了同样的问题并为我工作:

dependencies{

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

}

资源:https://projectlombok.org/setup/gradle

【讨论】:

  • 适用于 gradle 5.6.2,annotationProcessor 'org.projectlombok:lombok:1.18.8' 是强制性的
  • 如果您在测试中使用 lombok,您需要添加:testCompileOnly 'org.projectlombok:lombok:1.18.8'testAnnotationProcessor 'org.projectlombok:lombok:1.18.8'
【解决方案2】:

您需要将lombok 指定为注释处理器。为此,您需要在 Jhipster 项目中将以下内容添加到 build.gradle

apply plugin: 'net.ltgt.apt'

dependencies {    
    provided "org.projectlombok:lombok:$lombokVersion"
    apt "org.projectlombok:lombok:$lombokVersion"

    /** ... */
}

Jhipster 使用net.ltgt.gradle:gradle-apt-plugin 进行注释处理。

对于IntelliJ 设置,应选中Enable annotation Processing

更多信息:Project Lombok - android instructions

【讨论】:

    【解决方案3】:

    我使用 MacBook 和 Gradle 7.1.1。在 build.gradle 文件中,我添加了以下内容,无需插件即可成功构建。

    repositories {
        mavenCentral()
    }
    
    dependencies {
        compileOnly 'org.projectlombok:lombok:1.18.20'
        annotationProcessor 'org.projectlombok:lombok:1.18.20'
        
        testCompileOnly 'org.projectlombok:lombok:1.18.20'
        testAnnotationProcessor 'org.projectlombok:lombok:1.18.20'
    }
    

    【讨论】:

    • 为我修好了,谢谢!
    【解决方案4】:

    对于新用户,考虑使用 gradle 插件:

    plugins {
      id "io.freefair.lombok" version "5.3.3.3"
    }
    

    那么你就不需要compileOnlyannotationProcessor

    参考: https://plugins.gradle.org/plugin/io.freefair.lombok

    【讨论】:

      【解决方案5】:

      我在 ./gradlew clean build 工作正常时遇到了同样的问题,但是当我尝试执行 gradle clean build 时,getter 和 setter 方法应该是由 lombok 生成的,在 gradle 时没有找到建造 。 因为它抛出编译失败的异常编译

      之前我有 grapper wrapper 版本 3.4.1 和 gradle 版本 5.6.2。 所以我可以通过将我的 gradle 版本降级到 4.10.0 来解决这个问题 我的 gradle 包装器版本保持不变,即 3.4.1

      这是 gradle 版本

      Gradle 4.10

      构建时间:2018-08-27 18:35:06 UTC 修订:ee3751ed9f2034effc1f0072c2b2ee74b5dce67d

      Kotlin DSL:1.0-rc-3 科特林:1.2.60 时髦的:2.4.15 Ant:2018 年 3 月 23 日编译的 Apache Ant(TM) 版本 1.9.11 JVM:1.8.0_191(甲骨文公司 25.191-b12) 操作系统:Mac OS X 10.14.6 x86_64

      这是 gradle 包装版本

      Gradle 3.4.1

      构建时间:2017-03-03 19:45:41 UTC 修订:9eb76efdd3d034dc506c719dac2955efb5ff9a93

      时髦:2.4.7 Ant:2015 年 6 月 29 日编译的 Apache Ant(TM) 版本 1.9.6 JVM:1.8.0_191(甲骨文公司 25.191-b12) 操作系统:Mac OS X 10.14.6 x86_64

      这对我有用

      【讨论】:

      • 完全相同的问题。我不认为降级是一种选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多