Использование как lombok, так и protobuf приводит к задачам gradle без зависимостей, что иногда приводит к сбою сборки

Я использую ломбок и протобуф одновременно в градле. Это генерирует задачи generateEffectiveLombokConfig и generateProto, которые являются независимыми. Тем не менее, задача lombok должна зависеть от задачи protobuf, иначе код, сгенерированный lombok, ссылается на код Java, еще не сгенерированный protoc.

syntax = "proto3";
package my.example.v1;
message Task {
  string id = 1;
  repeated string names_to_print = 2;
}
package org.example;

import lombok.experimental.UtilityClass;
import my.example.v1.*;

@UtilityClass
public class Worker {

    public void work(TaskOuterClass.Task task) {
        // do something
    }

}
plugins {
    id 'java'
    id 'io.freefair.lombok' version '6.4.3'
    id 'com.google.protobuf' version '0.8.18'
}

group 'org.example'

repositories {
    mavenCentral()
}

dependencies {
    implementation "com.google.protobuf:protobuf-java:3.20.1"
    implementation "com.google.protobuf:protobuf-java-util:3.20.1"
}

Я попытался добавить вывод protobuf как sourceSet, чтобы убедиться, что задача protobuf выполняется первой, но получаю предупреждение:

sourceSets {
    main {
        java {
            srcDir "${projectDir}/build/generated/source/proto/main/java"
        }
    }
}

предупреждение:

Execution optimizations have been disabled for task ':generateProto' to ensure correctness due to the following reasons:
  - Gradle detected a problem with the following location: '/build/generated/source/proto/main'. Reason: Task ':generateEffectiveLombokConfig' uses this output of task ':generateProto' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. Please refer to https://docs.gradle.org/7.4.2/userguide/validation_problems.html#implicit_dependency for more details about this problem.

Как я могу убедиться, что все задачи protobuf выполняются до задач lombok?

Gradle за прокси-сервером
Gradle за прокси-сервером
Создайте проект Gradle под сетевым прокси.
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
"DevOps: Jenkins & AWS Series, часть 5: Установка Gradle на Ubuntu 22.04
В этой статье блога мы проведем вас через процесс установки Gradle на Ubuntu 22.04, интеграции его с Jenkins и создания задания Gradle. Мы...
0
0
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

вы ставите зависимость задачи, как показано ниже

afterEvaluate {
    generateEffectiveLombokConfig.mustRunAfter generateProto
}
Executing 'build -m'...

:extractIncludeProto SKIPPED
:extractProto SKIPPED
:generateProto SKIPPED
:generateEffectiveLombokConfig SKIPPED
:compileJava SKIPPED
:processResources SKIPPED
:classes SKIPPED
:jar SKIPPED
:assemble SKIPPED
:generateTestEffectiveLombokConfig SKIPPED
:extractIncludeTestProto SKIPPED
:extractTestProto SKIPPED
:generateTestProto SKIPPED
:compileTestJava SKIPPED
:processTestResources SKIPPED
:testClasses SKIPPED
:test SKIPPED
:check SKIPPED
:build SKIPPED

BUILD SUCCESSFUL in 299ms

Спасибо @PrasadU, который решает проблему. Теперь у меня вопрос вдогонку. Если я также использую java { withJavadocJar() } в build.gradle, выполняется задача delombok, которая терпит неудачу, поскольку не может найти файлы, сгенерированные protoc. Я пытался добавить delombok.mustRunAfter generateProto, но это не решает проблему.

Ivo 03.05.2022 17:04

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