Меня попросили реализовать некоторые классы gRP C для курса колледжа, и я столкнулся с некоторыми проблемами при создании классов java из одного исходного файла прототипа.
Сначала немного предыстории: это довольно базовая c услуга с простым методом, который получает идентификатор и возвращает телефон и электронную почту. Это прототип файла (BuscarData означает FetchData, извините за оставшийся неперевод!):
syntax = 'proto3';
option java_multiple_files=true;
option java_generic_services= true;
package uy.edu.um.sd20;
message DataRequest {
int32 id = 1;
}
message DataResponse {
string phone = 1;
string email = 2;
}
service DataRepo {
rpc BuscarData (DataRequest) returns (DataResponse);
}
Моя идея заключалась в том, чтобы сгенерировать классы с помощью плагинов Gradle. Мой build.gradle:
plugins {
id 'java'
id "com.google.protobuf" version '0.8.8'
}
apply plugin: 'java'
group 'org.example'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'com.google.protobuf', name: 'protobuf-java', version: '3.11.4'
implementation 'io.grpc:grpc-netty-shaded:1.29.0'
implementation 'io.grpc:grpc-protobuf:1.29.0'
implementation 'io.grpc:grpc-stub:1.29.0'
}
sourceSets {
main {
proto {
srcDir 'src/main/proto'
}
java {
srcDirs 'src/main/java', 'generated-sources/main/java'
}
}
}
protobuf {
protoc {
artifact = 'com.google.protobuf:protoc:3.11.0'
}
plugins {
grpc {
artifact = 'io.grpc:protoc-gen-grpc-java:1.29.0'
}
}
generateProtoTasks.generatedFilesBaseDir = 'generated-sources'
generateProtoTasks {
all().each { task ->
// Here you can configure the task
}
ofSourceSet('main')
}
}
Насколько я понял, все есть: зависимости grp c и proto c, а также плагин, который позволяет proto c компилировать grp c ( proto c -gen-grp c) и куда хранить сгенерированные файлы. Однако есть две проблемы:
- сгенерированные источники не помечены как источник или что-то в этом роде, что означает, что они не могут быть импортированы из других классов
- , если я не ошибаюсь , сгенерированные источники должны сгенерировать скелет DataRepoImpl, чтобы я мог добавить код, необходимый для BuscarData. Однако этого не произошло. Или, может быть, мне следует создать его, расширяя DataRepo. java, но я не смог его протестировать из-за проблемы № 1.
Я добавил снимок экрана с файловой структурой проекта. : img
Как видите, довольно много (если не все ) настроек градиента скопировано и скопировано со многих различных веб-сайтов. Надеюсь, я был достаточно осторожен, чтобы не повторить импорт. Есть похожие вопросы, и я пробовал их решения, но безуспешно. Один пример, с которым я знал, что мне нужно было включить плагин gen grp c: еще один вопрос SO
Любые подсказки относительно чего-либо еще приветствуются! Я новичок в вопросах, связанных с stackoverflow, поэтому, возможно, я сделал ошибки относительно специфики вопроса или цели вопроса.
Спасибо!
Franri.