Gradle 构建在 Lombok 带注释的类上失败

问题描述 投票:0回答:6

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

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

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

命令行:

./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;

}

我几个小时以来一直试图解决这个问题,但完全陷入困境。任何帮助将不胜感激。

intellij-idea gradle jhipster lombok
6个回答
107
投票

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

dependencies{

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

}

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


29
投票

您需要指定

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

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 说明


10
投票

我使用 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'
}

8
投票

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

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

那么你就不需要

compileOnly
annotationProcessor 

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


1
投票

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

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

这是gradle版本

摇篮4.10

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

Kotlin DSL:1.0-rc-3 科特林:1.2.60 格罗维:2.4.15 Ant:Apache Ant(TM) 版本 1.9.11 编译于 2018 年 3 月 23 日 JVM:1.8.0_191(Oracle 公司 25.191-b12) 操作系统:Mac OS X 10.14.6 x86_64

这是 gradle 包装版本

摇篮3.4.1

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

Groovy:2.4.7 Ant:Apache Ant(TM) 版本 1.9.6 编译于 2015 年 6 月 29 日 JVM:1.8.0_191(Oracle 公司 25.191-b12) 操作系统:Mac OS X 10.14.6 x86_64

这对我有用


0
投票

在我的例子中,Lombok 依赖项已正确添加到项目中,但

build
任务仍然失败。输出中没有任何有用的线索:每个 Lombok 生成的方法都标记有未解决的引用错误,并且 IDE 没有显示任何错误。

原来问题是由于使用实验性

@UtilityClass
造成的。特别是,
@UtilityClass
注解的类使用了从另一个
@UtilityClass
注解的类导入的静态方法,这些类都没有
static
修饰符。在导入的方法签名中添加
static
解决了该问题。

© www.soinside.com 2019 - 2024. All rights reserved.