python - 有没有办法在 Windows 上使用 gradle 编译 python protobuf?

标签 python gradle protocol-buffers protoc

我正在尝试使用 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/

相关文章:

android - java.lang.RuntimeException:java.lang.RuntimeException:com.android.builder.dexing.DexArchiveMergerException:

android - 如何更改Android Flavors的构建顺序

java - 如何使用protobuf编译java规范枚举

go - 扫描 github.com/golang/protobuf/proto/testdata : cannot find package "." 时出错

python - 查找整数列表中是否连续出现一个整数

android - Gradle 将重复文件放入 apk 文件中

python - 理解 Python 属性的工作

protocol-buffers - 我可以在 proto3 中定义一个有序的混合消息数组吗?

python - 父进程无法访问 PyQt 中的共享内存

python - 如果在另一个数据框中找到重复项,如何从一个数据框中删除重复项