繁体   English   中英

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

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

我想将Lombok添加到Gradle多模块项目中,但是我很难配置它。 正在阅读文档和多页内容,但是当它与多模块相关时,我无法使其工作。

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

在IntelliJ中,我可以使项目在一个模块中识别@Builder注释,并在单独的模块中使用生成的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

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

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

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

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

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

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编译依赖于通用性的第二个模块时,没有找到所谓生成的Lombok构建器类。

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

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

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

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

由于Daniele的回答和M.Ricciuti帮助我进行了故障排除,因此我将其更多地发布为评论而不是答案。

存在多个问题:

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

使用此版本使我摆脱了旧的gradle插件,只需添加Daniel的答案即可:

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

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

我将Daniel的答案标记为正确的答案,因为它也包含Ricciuti先生的评论

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM