Lombok @Builder 在 Gradle 模块中生成 class 在其他模块中找不到

Lombok @Builder generated class in a Gradle module not found in other module

我想将 Lombok 添加到 Gradle 多模块项目,但我很难配置它。正在阅读文档和多个页面,但是当涉及到多模块时我无法使其工作。

更新:升级到Gradle版本4.10.3,Java 8

在 IntelliJ 中,我可以让项目在一个模块中识别 @Builder 注释,并在单独的模块中使用生成的构建器 class。但是,当 运行 终端上的 gradle build 时,我得到:

/myprj/module1/src/main/java/CampaignTracker.java:143: error: cannot find symbol

CampaignBuilder campaignBuilder = Campaign.builder()
                                          ^
  symbol:   method builder()
  location: class CampaignLead

我们有 Gradle 结构如下的多模块项目:

myprj
  |- common
       |- Campaign.java
       |- build.gradle
  |- module1
       |- CampaignTracker.java
       |- build.gradle
  |- module2
       ...
  build.gradle

在common模块中,我们在Campaign.javaclass中使用@Builderlombok注解,像这样:

@Builder
@AllArgsConstructor
public class Campaign {
   ...
}

然后在名为module1的单独模块上,我们要使用lombok生成的builder,像这样:

public class CampaignTracker implements Tracking {
    void buildCampaign() {
        CampaignBuilder campaignBuilder = Campaign.builder()
             .id(...)
             .name(...);
        //more stuffs
    }
}

在我们的根 build.gradle 中,我们有:

subprojects {
    repositories {
        mavenLocal()
        mavenCentral()
    }

    apply plugin: 'java'
    apply plugin: 'maven'
    apply plugin: 'idea'
    apply plugin: "net.ltgt.apt"
    apply plugin: 'jacoco'

    tasks.withType(Test) {
        systemProperty 'user.country', 'US'
        systemProperty 'user.language', 'en'
    }

    dependencies {
        compileOnly 'org.projectlombok:lombok:1.18.8'
        annotationProcessor 'org.projectlombok:lombok:1.18.8'
    }
}

我的问题是,当 gradle 编译依赖于 common 的第二个模块时,它没有找到假定生成的 Lombok 构建器 class。

更新:如果我用 gradle clean build -p commons -x test 独立构建模块,我看到生成了 CampaignBuilder,但是当我构建整个项目时却没有。

你知道为什么 Gradle 没有 recognize/find 由 Lombok 在单独的模块中生成的代码吗?

似乎 Gradle 构建没有配置为应用 Lombok-(IDE 是因为它足够聪明)。请参阅 lombok-gradle 中的文档;您可以使用 gradle 插件,或添加到 common 模块:

dependencies {
  compileOnly 'org.projectlombok:lombok:1.18.8'
  annotationProcessor 'org.projectlombok:lombok:1.18.8'
}

我 post 这个答案更像是评论而不是答案,因为 Daniele's answer and M.Ricciuti 帮助我解决了这个问题。

存在多个问题:

该项目使用的是 gradle wrapper 2.13,不支持注释处理器。我使用旧版 lombok 插件进行了测试,但无法解决问题。我找到的可行解决方案是升级到最新的 4.x (4.10.3)。

使用这个版本让我摆脱了遗留的 gradle 插件,只需添加丹尼尔的回答:

dependencies {
  compileOnly 'org.projectlombok:lombok:1.18.8'
  annotationProcessor 'org.projectlombok:lombok:1.18.8'
}

另一方面,IntelliJ 被配置为使用 Gradle Wrapper (2.13),它不适用于 annotationProcessor 因此 not 生成import 语句。

我将 Daniel 的答案标记为正确答案,因为它还包含 M. Ricciuti 评论