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

时间:2018-10-06 10:04:03

标签: java gradle protocol-buffers grpc

如果我遵循grpc-java自述文件中的说明并且使用了maven,则protobuf生成的文件将显示在target目录中,并随后在类路径中供我扩展等。但是,当我使用gradle,生成的类将显示在build目录中,并且不在类路径中。我是新手,所以我不太确定为什么它会表现得如此不同。

我的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 个答案:

答案 0 :(得分:0)

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

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

完成此操作后,存根应该位于您的类路径中。

public class SomeServer extends MyProtoClassGrpc.PDFExtractImplBase {}