【问题标题】:Managing Shared Protocol Buffer library and using Gradle to Compile管理 Shared Protocol Buffer 库和使用 Gradle 编译
【发布时间】:2018-01-14 10:44:15
【问题描述】:

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

【问题讨论】:

    标签: gradle protocol-buffers grpc idl


    【解决方案1】:

    您的远程 .proto 文件/repo 是什么形式的?如果只是一个 url,那么你可以使用 Download 任务:

    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'
                    }
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-03-16
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多