Fed*_*zza 0 java gradle multi-module lombok
我想添加Lombok到Gradle多模块项目,但我很难配置它。正在阅读文档和多个页面,但是当它涉及多个模块时我无法使其工作。
更新:升级到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 生成的代码吗?
似乎 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)
| 归档时间: |
|
| 查看次数: |
3091 次 |
| 最近记录: |