首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >同时使用lombok和protobuf会导致分级任务,而无需依赖,有时会导致构建失败

同时使用lombok和protobuf会导致分级任务,而无需依赖,有时会导致构建失败
EN

Stack Overflow用户
提问于 2022-05-03 12:37:05
回答 1查看 579关注 0票数 1

我在gradle中同时使用lombok和protobuf。这将生成独立的任务generateEffectiveLombokConfiggenerateProto。然而,lombok任务应该依赖于protobuf任务,否则lombok生成的代码指的是尚未由protoc生成的Java代码。

代码语言:javascript
运行
复制
syntax = "proto3";
package my.example.v1;
message Task {
  string id = 1;
  repeated string names_to_print = 2;
}
代码语言:javascript
运行
复制
package org.example;

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

@UtilityClass
public class Worker {

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

}
代码语言:javascript
运行
复制
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任务,但是我得到了一个警告:

代码语言:javascript
运行
复制
sourceSets {
    main {
        java {
            srcDir "${projectDir}/build/generated/source/proto/main/java"
        }
    }
}

警告:

代码语言:javascript
运行
复制
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任务?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-03 13:46:47

您将任务依赖项放置如下

代码语言:javascript
运行
复制
afterEvaluate {
    generateEffectiveLombokConfig.mustRunAfter generateProto
}
代码语言:javascript
运行
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72099476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档