Сгенерированные Protobuf классы не могут быть найдены при использовании gradle - PullRequest
0 голосов
/ 06 октября 2018

Если я следую инструкции в файле readme grpc-java и использую maven, файлы, созданные с помощью protobuf, появятся в каталоге target и впоследствии будут добавлены в classpath, чтобы я мог их расширить и т.д. Однакокогда я использую 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 Ответ

0 голосов
/ 07 октября 2018

Похоже, что Gradle (если вы хотите использовать сгенерированные заглушки / интерфейсы сервера) в проекте, в котором живут ваши файлы proto (т.е. проект предназначен не только для создания jar-файлов и их публикации), то вы будетенеобходимо добавить generatedFilesBaseDir к вашему build.gradle файлу:

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

После того, как вы это сделаете, заглушки должны быть в вашем classpath.

public class SomeServer extends MyProtoClassGrpc.PDFExtractImplBase {}
...