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