【问题标题】: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'
}
}
}
}
}