[英]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.