管理共享协议缓冲区库,并使用Gradle编译
问题描述:
我想有3个Java应用程序(后端,前端和Android应用程序)使用协议缓冲区(gRPC)进行通信。所以我希望这3个应用程序都能够访问共享的protobuf库(Github),在这里我管理.proto文件。我是使用Gradle和protobufs的新手,所以我不确定管理这个的正确方法是什么,任何帮助或指导都不胜感激。我可以让每个Gradle项目将我的github protobuf repo声明为依赖项,然后在构建项目时将其拉下并编译它?因为Android应用可能需要不同的“Java-lite”版本的protobufs,所以我会假设这种方式是实现它的一种好方法,而不是存储已编译的protobuf类。我正在使用google/protobuf-gradle-plugin来编译.proto文件,并查看从本地文件进行编译的文档,或者拉入具有预编译的.proto文件的项目,但没有提供远程.proto文件的文档。我在正确的轨道上吗?管理共享协议缓冲区库,并使用Gradle编译
答
你的远程.proto文件/回购是什么形式?如果它只是一个网址,那么你可以使用下载任务:
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'
}
}
}
}
}