Gradle 多项目不生成Lombok的好东西
Gradle multi-project does not generate Lombok's goodness
我在 Gradle 中有一个多项目。 build.gradle
脚本如下所示:
buildscript {
repositories {
jcenter()
mavenCentral()
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath "com.github.jengelman.gradle.plugins:shadow:2.0.4"
classpath "io.franzbecker:gradle-lombok:1.14"
}
}
allprojects {
//apply plugin: "base"
}
subprojects {
apply plugin: "com.github.johnrengelman.plugin-shadow"
apply plugin: "idea"
apply plugin: "java"
apply plugin: "io.franzbecker.gradle-lombok"
group = "io.shido"
version = "0.1.0-SNAPSHOT"
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
repositories {
jcenter()
mavenCentral()
}
dependencies {
// [start] Research
//compileOnly "org.projectlombok:lombok:1.18.2"
// [end] Research
testCompile "nl.jqno.equalsverifier:equalsverifier:2.4.5"
testCompile "org.junit.jupiter:junit-jupiter-api:$junit_version"
testImplementation "org.junit.jupiter:junit-jupiter-params:$junit_version"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit_version"
}
//=================================================================================================
// P L U G I N S
//=================================================================================================
lombok {
version = "1.18.2"
}
//=================================================================================================
// T A S K S
//=================================================================================================
// shadowJar { ... }
test {
useJUnitPlatform()
}
}
我有一个 messages
项目然后有了这个 build.script
:
plugins {
id "java-library"
}
repositories {
jcenter()
mavenCentral()
}
...和一个 core
项目 build.script
:
plugins {
id "io.spring.dependency-management" version "1.0.6.RELEASE"
}
dependencies {
compile project(":messages")
}
所有这些都应该没问题。
如果我在messages
中写一个简单的class:
package io.shido.event;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
@Getter
@Builder
@ToString
@EqualsAndHashCode(of = "name")
class Prototype {
private String id;
private String name;
}
...然后是相同的单元测试:
package io.shido.event;
import org.junit.jupiter.api.Test;
final class PrototypeTest {
@Test
void instantiate() {
final Prototype event = Prototype.???
}
}
我希望我可以为此使用生成器 class,但没有生成任何东西。
我是不是在设置中遗漏了什么?一切都编译,但我看不到为龙目岛生成的任何东西。不确定还能尝试什么。
如果您使用的是 IDEA 和 Gradle 的最新版本(我认为 >= 4.7),您可以使用以下设置,它在我的不同项目中运行良好:
- 从设置->插件配置面板为 IDEA 安装 Lombok 插件。
在您的 Gradle 构建脚本中,您可以删除 lombok 插件声明和 lombok 块:您只需要在您的项目中添加以下依赖项。
ext{
lombokVersion = '1.16.20'
junitVersion = '4.12'
}
dependencies {
compileOnly "org.projectlombok:lombok:${lombokVersion}"
annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
// other libs ...
// test dependencies
testCompile group: 'junit', name: 'junit', version: "${junitVersion}"
}
项目重新导入后,确保在 IDEA 中启用 Annotation Processing,从 Settings -> Build,Execution,Deployment -> Compiler->AnnotationProcessors菜单:有一个复选框“启用注释处理”,默认情况下禁用。
这应该可以正常工作,您将能够在主代码和单元测试中使用 Lombok 功能。
我在 Gradle 中有一个多项目。 build.gradle
脚本如下所示:
buildscript {
repositories {
jcenter()
mavenCentral()
maven { url "https://plugins.gradle.org/m2/" }
}
dependencies {
classpath "com.github.jengelman.gradle.plugins:shadow:2.0.4"
classpath "io.franzbecker:gradle-lombok:1.14"
}
}
allprojects {
//apply plugin: "base"
}
subprojects {
apply plugin: "com.github.johnrengelman.plugin-shadow"
apply plugin: "idea"
apply plugin: "java"
apply plugin: "io.franzbecker.gradle-lombok"
group = "io.shido"
version = "0.1.0-SNAPSHOT"
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
repositories {
jcenter()
mavenCentral()
}
dependencies {
// [start] Research
//compileOnly "org.projectlombok:lombok:1.18.2"
// [end] Research
testCompile "nl.jqno.equalsverifier:equalsverifier:2.4.5"
testCompile "org.junit.jupiter:junit-jupiter-api:$junit_version"
testImplementation "org.junit.jupiter:junit-jupiter-params:$junit_version"
testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit_version"
}
//=================================================================================================
// P L U G I N S
//=================================================================================================
lombok {
version = "1.18.2"
}
//=================================================================================================
// T A S K S
//=================================================================================================
// shadowJar { ... }
test {
useJUnitPlatform()
}
}
我有一个 messages
项目然后有了这个 build.script
:
plugins {
id "java-library"
}
repositories {
jcenter()
mavenCentral()
}
...和一个 core
项目 build.script
:
plugins {
id "io.spring.dependency-management" version "1.0.6.RELEASE"
}
dependencies {
compile project(":messages")
}
所有这些都应该没问题。
如果我在messages
中写一个简单的class:
package io.shido.event;
import lombok.Builder;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.ToString;
@Getter
@Builder
@ToString
@EqualsAndHashCode(of = "name")
class Prototype {
private String id;
private String name;
}
...然后是相同的单元测试:
package io.shido.event;
import org.junit.jupiter.api.Test;
final class PrototypeTest {
@Test
void instantiate() {
final Prototype event = Prototype.???
}
}
我希望我可以为此使用生成器 class,但没有生成任何东西。
我是不是在设置中遗漏了什么?一切都编译,但我看不到为龙目岛生成的任何东西。不确定还能尝试什么。
如果您使用的是 IDEA 和 Gradle 的最新版本(我认为 >= 4.7),您可以使用以下设置,它在我的不同项目中运行良好:
- 从设置->插件配置面板为 IDEA 安装 Lombok 插件。
在您的 Gradle 构建脚本中,您可以删除 lombok 插件声明和 lombok 块:您只需要在您的项目中添加以下依赖项。
ext{ lombokVersion = '1.16.20' junitVersion = '4.12' } dependencies { compileOnly "org.projectlombok:lombok:${lombokVersion}" annotationProcessor "org.projectlombok:lombok:${lombokVersion}" // other libs ... // test dependencies testCompile group: 'junit', name: 'junit', version: "${junitVersion}" }
项目重新导入后,确保在 IDEA 中启用 Annotation Processing,从 Settings -> Build,Execution,Deployment -> Compiler->AnnotationProcessors菜单:有一个复选框“启用注释处理”,默认情况下禁用。
这应该可以正常工作,您将能够在主代码和单元测试中使用 Lombok 功能。