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.java
class中使用@Builder
lombok注解,像这样:
@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 评论
我想将 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.java
class中使用@Builder
lombok注解,像这样:
@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 评论