使用gradle时找不到Protobuf生成的类

3
如果我按照 grpc-java 的说明进行操作,并使用 Maven,那么生成的 protobuf 文件将出现在目录中的 target 文件夹中,并随后出现在类路径中,以供扩展等。然而,当我使用 Gradle 时,生成的类出现在 build 目录中,并且不在类路径中。我对 Gradle 还比较新,所以不太清楚它为什么行为如此不同。 我的 build.gradle 文件
apply plugin: 'java'
apply plugin: 'com.google.protobuf'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.5'
    }
}

group 'co.example'
version '1.0-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile 'io.grpc:grpc-netty-shaded:1.15.1'
    compile 'io.grpc:grpc-protobuf:1.15.1'
    compile 'io.grpc:grpc-stub:1.15.1'
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.5.1-1"
    }
    //noinspection GroovyAssignabilityCheck
    plugins {
        grpc {
            artifact = 'io.grpc:protoc-gen-grpc-java:1.15.1'
        }
    }
    generateProtoTasks {
        all()*.plugins {
            grpc {}
        }
    }
}
1个回答

3

看起来对于Gradle(如果您想使用生成的存根/服务器接口)在您的proto文件所在的项目中(即该项目不仅用于生成jar并发布它们),那么您需要将generatedFilesBaseDir添加到您的build.gradle文件中:

protobuf {
    generatedFilesBaseDir = "$projectDir/src/main/java/generated"
    ...
}

一旦您完成这个步骤,桩代码应该在您的类路径中。
public class SomeServer extends MyProtoClassGrpc.PDFExtractImplBase {}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接