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

Fed*_*zza 0 java gradle multi-module lombok

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

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

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

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

CampaignBuilder campaignBuilder = Campaign.builder()
                                          ^
  symbol:   method builder()
  location: class CampaignLead
Run Code Online (Sandbox Code Playgroud)

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

myprj
  |- common
       |- Campaign.java
       |- build.gradle
  |- module1
       |- CampaignTracker.java
       |- build.gradle
  |- module2
       ...
  build.gradle
Run Code Online (Sandbox Code Playgroud)

在公共模块中,我们在类@Builder中使用lombok注释,Campaign.java如下所示:

@Builder
@AllArgsConstructor
public class Campaign {
   ...
}
Run Code Online (Sandbox Code Playgroud)

然后在名为 的单独模块上module1,我们要使用 lombok 生成的构建器,如下所示:

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

在我们的 root 中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'
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

您知道为什么 Gradle 无法在单独的模块中识别/找到 Lombok 生成的代码吗?

Dan*_*ele 5

似乎 Gradle 构建未配置为应用 Lombok-(IDE 会这样做,因为它足够智能)。请参阅lombok-gradle的文档;您可以使用 gradle 插件,或添加到common模块中:

dependencies {
  compileOnly 'org.projectlombok:lombok:1.18.8'
  annotationProcessor 'org.projectlombok:lombok:1.18.8'
}
Run Code Online (Sandbox Code Playgroud)