我正在尝试使用 gradle 将 proto 文件编译成 python,这个任务对于 java 来说似乎微不足道,但出于某种原因,使用我迄今为止尝试过的任何东西都不适用于 python。
之前我使用本教程将 .proto 文件编译成 java:https://github.com/google/protobuf-gradle-plugin 但出于某种原因,似乎没有类似的编译 python 的解决方案。 我仍然可以使用 CLI 手动编译它,但我真的很想创建一个不需要手动执行任何操作的解决方案,也不需要在用户计算机上安装 protoc。 我在这个线程中找到了线索:https://github.com/google/protobuf-gradle-plugin/issues/52但它似乎对我不起作用。
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.9'
}
}
plugins {
id 'java'
id "com.google.protobuf" version "0.8.8"
id 'application'
}
group 'foo.bar'
mainClassName = 'some.class.name'
version '1.0.2'
apply plugin: 'eclipse'
apply plugin: 'maven-publish'
apply plugin: 'java'
apply plugin: 'com.google.protobuf'
apply plugin: 'idea'
repositories {
mavenCentral()
}
dependencies {
compile "com.google.protobuf:protobuf-java:3.6.0"
compile("io.grpc:grpc-netty:1.7.0")
compile("io.grpc:grpc-protobuf:1.7.0")
compile("io.grpc:grpc-stub:1.7.0")
}
buildDir = "$rootProject.buildDir"
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.6.0"
}
plugins {
grpc_java {
artifact = "io.grpc:protoc-gen-grpc-java:1.17.1"
}
grpc_python {
path = "python -m grpc_tools.protoc"
}
}
generateProtoTasks {
all()*.builtins {
java {}
python {}
}
all()*.plugins {
grpc_java {
outputSubDir = "java"
}
grpc_python {
outputSubDir = "python"
}
}
}
generatedFilesBaseDir = "$buildDir/generated/src"
}
最佳答案
有一种方法,在以后的5.8++版本的gradle中使用Kotlin语言(so build.gradle.kts)如果使用groovy需要稍微修改。
这对我们有用
protobuf {
protoc { artifact = "com.google.protobuf:protoc:$protobufVersion" }
plugins {
id("grpc") { artifact = "io.grpc:protoc-gen-grpc-java:$grpcVersion" }
id("grpckt") { artifact = "io.grpc:protoc-gen-grpc-kotlin:$grpcKotlinVersion:jdk7@jar" }
}
generateProtoTasks {
all().forEach {
it.plugins {
id("grpc")
id("grpckt")
}
it.builtins {
id("kotlin")
id("python")
}
}
}
关于python - 有没有办法在 Windows 上使用 gradle 编译 python protobuf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56769059/