我在gradle中同时使用lombok和protobuf。这将生成独立的任务generateEffectiveLombokConfig
和generateProto
。然而,lombok任务应该依赖于protobuf任务,否则lombok生成的代码指的是尚未由protoc生成的Java代码。
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.
如何确保在lombok任务之前完成所有protobuf任务?
发布于 2022-05-03 13:46:47
您将任务依赖项放置如下
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
https://stackoverflow.com/questions/72099476
复制相似问题