首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Gradle protobuf任务不从依赖项中拾取定义

Gradle是一种基于Groovy语言的构建工具,用于自动化构建、测试和部署软件项目。Protobuf是Google开发的一种数据序列化和反序列化的工具,用于在不同平台和语言之间传输和存储结构化数据。

在Gradle中,protobuf任务用于编译和生成Protobuf定义文件的Java类。当我们在Gradle中定义protobuf任务时,它默认不会从依赖项中拾取定义。这意味着,如果我们的项目中使用了其他模块或库中的Protobuf定义文件,我们需要手动将这些定义文件添加到我们的项目中。

为了使Gradle的protobuf任务能够从依赖项中拾取定义,我们可以使用插件或自定义任务来实现。以下是一种可能的解决方案:

  1. 使用插件:可以使用com.google.protobuf插件来处理protobuf任务。首先,在项目的build.gradle文件中添加以下插件依赖:
代码语言:txt
复制
plugins {
    id 'com.google.protobuf' version '0.8.17'
}

然后,在protobuf任务中使用protobuf块来配置任务的行为。在protobuf块中,我们可以使用protoc选项来指定要包含的额外定义文件的路径。例如:

代码语言:txt
复制
protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.17.3'
    }
    plugins {
        grpc {
            artifact = 'io.grpc:protoc-gen-grpc-java:1.40.1'
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                java {
                    option 'lite'
                }
            }
            task.plugins {
                grpc {}
            }
        }
    }
}

这样配置后,Gradle的protobuf任务将会从依赖项中拾取定义,并生成相应的Java类。

  1. 自定义任务:如果不想使用插件,我们也可以自定义Gradle任务来处理protobuf定义文件。首先,在build.gradle文件中定义一个自定义任务,例如:
代码语言:txt
复制
task generateProtobuf(type: JavaExec) {
    classpath configurations.protobuf
    main 'com.google.protobuf.compiler.Main'
    args '-I', 'src/main/proto', '--java_out', 'src/main/java', 'src/main/proto/your_protobuf_file.proto'
}

在上述示例中,我们使用JavaExec类型的任务来执行com.google.protobuf.compiler.Main类,该类是Protobuf编译器的入口点。我们通过args参数指定了输入文件的路径和输出文件的路径。

然后,我们需要在dependencies块中添加protobuf的依赖项。例如:

代码语言:txt
复制
dependencies {
    protobuf 'com.google.protobuf:protobuf-java:3.17.3'
}

这样配置后,运行gradle generateProtobuf命令即可执行自定义的protobuf任务,并从依赖项中拾取定义。

总结:Gradle protobuf任务默认不会从依赖项中拾取定义,但我们可以通过使用插件或自定义任务来实现从依赖项中拾取定义的功能。插件方式可以使用com.google.protobuf插件,并在任务配置中指定额外定义文件的路径。自定义任务方式可以使用JavaExec类型的任务,并在任务配置中指定输入文件和输出文件的路径。无论使用哪种方式,都需要在dependencies块中添加protobuf的依赖项。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 这个机器人太牛了,陌生物体抓取识别成功率高达100%

    给杂货拆包是一件简单但乏味的工作:手伸进包里,摸索着找到一件东西,然后把它拿出来。简单瞄一眼之后,你会了解这是什么东西,它应该存放在哪里 如今,麻省理工学院和普林斯顿大学的工程师们已经开发出一种机器人系统,未来有一天,他们可能会帮你完成这项家务,并协助其他拣选和分拣工作,例如在仓库组织产品,或在宅区清除瓦砾。 该团队的“拾放”系统由一个标准的工业机器人手臂组成,研究人员配备了一个定制抓手和吸盘。他们开发了一种“未知物体”的抓取算法,使机器人能够评估一堆随机物体,并确定在杂物中抓取或吸附物品的最佳方式,而

    08

    1小时学会走路,10分钟学会翻身,世界模型让机器人迅速掌握多项技能

    选自arXiv 机器之心编译 编辑:小舟、蛋酱 世界模型在实体机器人上能发挥多大的作用? 教机器人解决现实世界中的复杂任务,一直是机器人研究的基础问题。深度强化学习提供了一种流行的机器人学习方法,让机器人能够通过反复试验改善其行为。然而,当前的算法需要与环境进行过多的交互才能学习成功,这使得它们不适用于某些现实世界的任务。 为现实世界学习准确的世界模型是一个巨大的开放性挑战。在最近的一项研究中,UC 伯克利的研究者利用 Dreamer 世界模型的最新进展,在最直接和最基本的问题设置中训练了各种机器人:无

    03

    学界 | 看一遍人类动作就能模仿,能理解语义的谷歌机器人登上无监督学习的新高度

    AI 科技评论按:机器学习能让机器人学会复杂的技能,例如抓住把手打开门。然而学习这些技能需要先人工编写一个奖励函数,然后才能让机器人开始优化它。相比之下,人类可以通过观察别人的做法来理解任务的目标,或者只是被告知目标是什么,就可以完成任务。目前,谷歌期望通过教会机器人理解语义概念,以使得机器人能够从人类的示范中学习动作,以及理解物体的语义概念,完成抓取动作。 以下为 AI 科技评论编译的这篇谷歌博客的部分内容。 问题的引入 人类与机器人不同,我们不需要编写目标函数即可以完成许多复杂的任务。我们可以这样做,是

    08
    领券