Gradle多项目不会产生Lombok的优势

时间:2018-08-21 14:41:13

标签: gradle lombok intellij-lombok-plugin

我在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的{​​{1}}项目:

build.script

所有这些都可以。

如果我在plugins { id "io.spring.dependency-management" version "1.0.6.RELEASE" } dependencies { compile project(":messages") } 中编写一个简单的类:

messages

...然后进行相同的单元测试:

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;
}

我希望我可以在那里使用该类的生成器,但不会生成任何东西。

我在设置中缺少什么吗?一切都可以编译,但是我看不到Lombok正在生成任何东西。不知道还有什么尝试。

1 个答案:

答案 0 :(得分:2)

如果您使用的是IDEA和最新版本的Gradle(我认为> = 4.7),则可以使用以下设置在我的不同项目中都可以正常使用:

    从设置->插件配置面板
  1. 为IDEA安装Lombok插件。
  2. 在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}"
    }
    
  3. 重新导入项目后,请确保从设置->生成,执行,部署->编译器-> AnnotationProcessors 菜单中启用IDEA中的注释处理:有一个复选框“ 启用注释处理”,默认情况下处于禁用状态。

这应该可以正常工作,并且您将能够在主代码和单元测试中使用Lombok功能。