Мультипроект Gradle не порождает добра Ломбока

У меня есть мульти-проект в 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:

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 ответ

Решение

Если вы используете IDEA и последнюю версию Gradle (я думаю>> 4.7), вы можете использовать следующую настройку, которая отлично работает в моих разных проектах:

  1. установите плагин Lombok для IDEA, из Настройки-> Панель настройки плагинов.
  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. После повторного импорта проекта обязательно включите обработку аннотаций в IDEA в меню "Настройки" -> "Построение, выполнение, развертывание" -> "Компилятор" -> "AnnotationProcessors": есть флажок "Включить обработку аннотаций", который по умолчанию отключен.

Это должно работать нормально, и вы сможете использовать функции Lombok в своем основном коде, а также в модульном тестировании.

Другие вопросы по тегам