代码之家  ›  专栏  ›  技术社区  ›  x80486

Gradle的多项目并不能产生Lombok的优点

  •  0
  • x80486  · 技术社区  · 6 年前

    我在格雷德有一个多项目。这个 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 生成脚本 :

    plugins {
      id "io.spring.dependency-management" version "1.0.6.RELEASE"
    }
    
    dependencies {
      compile project(":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;
    }
    

    …然后对其进行单元测试:

    package io.shido.event;
    
    import org.junit.jupiter.api.Test;
    
    final class PrototypeTest {
      @Test
      void instantiate() {
        final Prototype event = Prototype.???
      }
    }
    

    我希望我可以在那里使用该类的生成器,但是没有生成任何内容。

    我在设置中遗漏了什么吗?一切都可以编译,但我看不到为Lombok生成的任何东西。不知道还能尝试什么。

    1 回复  |  直到 6 年前
        1
  •  4
  •   M.Ricciuti    6 年前

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

    1. 在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}"
      }
      
    2. 项目重新导入后,请确保启用IDEA中的注释处理,从 菜单:有一个复选框“ 启用批注处理

    这应该可以很好地工作,并且您可以在主代码和单元测试中使用Lombok特性。

    推荐文章