gradle - 管理共享 Protocol Buffer 库并使用Gradle进行编译

标签 gradle protocol-buffers grpc idl

我想使用 Protocol Buffer (gRPC)进行通讯的3个Java应用程序(后端,前端和Android应用程序)。因此,我希望这3个应用程序都能访问我管理.proto文件的共享protobuf存储库(Github)。我是使用Gradle和protobufs的新手,所以我不确定管理此方法的正确方法是什么,任何帮助或指导都将不胜感激。我可以让每个Gradle项目将我的github protobuf存储库声明为依赖项,然后在构建项目时将其下拉并进行编译吗?我认为这种方法是一种很好的方法,而不是存储已编译的protobuf类,因为Android应用程序可能需要不同的Java精简版protobuf?我正在使用google / protobuf-gradle-plugin来编译.proto文件,并查看用于从本地文件进行编译的文档,或者查看已预编译.proto文件的项目,但是没有用于获取远程.proto文件的文档。我在正确的轨道上吗?

最佳答案

您的远程.proto文件/存储库以什么形式?如果只是URL,则可以使用“下载”任务:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.0'
    }
}

plugins {
    id "de.undercouch.download" version "3.2.0"
}

group 'testtest'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'com.google.protobuf'


sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

task downloadFile << {
    download {
        src 'https://raw.githubusercontent.com/grpc/grpc-java/master/compiler/src/test/proto/test.proto'
        dest "$projectDir/src/main/proto/test.proto"
        overwrite true
    }
}

build.dependsOn downloadFile

dependencies {
    compile "io.grpc:grpc-protobuf-lite:1.5.0"
    compile "io.grpc:grpc-stub:1.5.0"
}

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.3.0'
    }
    plugins {
        javalite {
            artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0"
        }
        grpc {
            artifact = "io.grpc:protoc-gen-grpc-java:1.5.0"
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                remove java
            }
            task.plugins {
                javalite {}
                grpc {
                    option 'lite'
                }
            }
        }
    }
}

关于gradle - 管理共享 Protocol Buffer 库并使用Gradle进行编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45541617/

相关文章:

python - 如果子消息没有字段,如何在 protobuf 消息上分配一个字段?

android - 如何在android库中导出依赖项

go - Protocol Buffer : Send arbitrary structure over GRPC

c++ - 通过引用或指针返回并检查是否为空?

c++ - Protocol Buffer 可以序列化 hash_multimap 吗?

c++ - 如何为包含 protobuf 库的 C++ 程序生成共享库 (.so) 文件

java - Gradle、Cucumber 和 Windows 命令长度

Gradle Ear 插件不应将资源复制到 .ear 根目录

android - 有条件地在 gradle build 中包含项目

使用 Google Cloud Pub/Sub 消息订阅者实现时无法创建 Spring-Boot bean