如何解决尽管我可以使用io.grpc:protoc-gen-grpc-kotlin生成存根,但是我无法实现它
问题:我无法实现从protobuf自动生成的对象。
复制方式:使用gRPC应用程序类型Java 11 Kotlin从micronaut初始化程序生成了一个项目。在build.gradle上添加io.grpc:protoc-gen-grpc-kotlin,对其进行构建,添加一个控制器,然后尝试实现GrpcdemoServiceGrpcKt。
build.gradle
{
labels: string[];
datasets: {
label: string;
backgroundColor?: string;
borderColor: string;
pointBackgroundColor?: string;
data: number[]
}[]
}
gradle.properties
plugins {
id "org.jetbrains.kotlin.jvm" version "1.4.10"
id "org.jetbrains.kotlin.kapt" version "1.4.10"
id "org.jetbrains.kotlin.plugin.allopen" version "1.4.10"
id "com.github.johnrengelman.shadow" version "6.1.0"
id "io.micronaut.application" version '1.0.5'
id "com.google.protobuf" version "0.8.13"
}
version "0.1"
group "com.mybank"
repositories {
mavenCentral()
jcenter()
}
micronaut {
testRuntime "junit5"
processing {
incremental true
annotations "com.mybank.*"
}
}
dependencies {
implementation("io.micronaut:micronaut-validation")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}")
implementation("org.jetbrains.kotlin:kotlin-reflect:${kotlinVersion}")
implementation("io.micronaut.kotlin:micronaut-kotlin-runtime")
implementation("io.micronaut:micronaut-runtime")
implementation("io.micronaut.grpc:micronaut-grpc-runtime")
implementation("javax.annotation:javax.annotation-api")
runtimeOnly("ch.qos.logback:logback-classic")
runtimeOnly("com.fasterxml.jackson.module:jackson-module-kotlin")
testImplementation("io.micronaut:micronaut-http-client")
implementation("io.grpc:grpc-kotlin-stub:${grpcKotlinVersion}")
}
mainClassName = "com.mybank.ApplicationKt"
java {
sourceCompatibility = JavaVersion.toVersion('11')
}
compileKotlin {
kotlinOptions {
jvmTarget = '11'
}
}
compileTestKotlin {
kotlinOptions {
jvmTarget = '11'
}
}
sourceSets {
main {
java {
srcDirs 'build/generated/source/proto/main/grpc'
srcDirs 'build/generated/source/proto/main/java'
}
}
}
protobuf {
protoc { artifact = "com.google.protobuf:protoc:3.13.0" }
plugins {
grpc { artifact = "io.grpc:protoc-gen-grpc-java:1.32.1" }
grpckt { artifact = "io.grpc:protoc-gen-grpc-kotlin:${grpcKotlinVersion}" }
}
generateProtoTasks {
all()*.plugins {
grpc {}
grpckt {}
}
}
}
其余所有与micronaut.launch完全相同
可能的解决方案:有一个示例我成功下载并启动,并从BloomRPC调用了它。它来自官方示例github。看着它,我看到了更为复杂的gradle。
从Hello World构建gradle
micronautVersion=2.1.3
kotlinVersion=1.4.10
grpcKotlinVersion=0.1.2
问题:自生成自动生成的存根以来,我缺少什么?除了io.grpc:protoc-gen-grpc-kotlin之外,我还需要更多gradle依赖项吗?我猜不会。我的方向正确吗?如果不是,我该怎么做才能实现从Micronaut.launch下载的演示项目中的send rpc方法?
PS:当我尝试使用io.grpc:protoc-gen-grpc-kotlin 0.2.1的最新版本时,gradle抱怨说,所以我只使用0.1.2,这与官方示例相同。只要与我的问题无关,这对我来说就不是问题。
免责声明:最初在micronaut github中问
解决方法
我对此也有一些疑问。
我认为您真正想做的是要实现ImplBase,该ImplBase生成并驻留在GrpcKt文件中,而不是整个对象本身
我在这里开始了一个您可以遵循的示例: https://github.com/FerhatBahceci/store-service/blob/master/build.gradle.kts
,
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import com.google.protobuf.gradle.*
group = "store.service"
version = "0.0.1-SNAPSHOT"
buildscript {
dependencies {
classpath(kotlin("gradle-plugin",version = "1.4.20"))
classpath("com.google.protobuf:protobuf-gradle-plugin:0.8.14")
classpath("io.micronaut.gradle:micronaut-gradle-plugin:1.2.0")
}
}
plugins {
idea
kotlin("jvm") version "1.4.20"
kotlin("plugin.serialization") version "1.4.20"
id("com.google.protobuf") version "0.8.14"
id("com.github.johnrengelman.shadow") version "6.1.0"
id("io.micronaut.application") version "1.2.0"
}
micronaut {
runtime("netty")
testRuntime("junit5")
processing {
incremental(true)
annotations("store.service.*")
}
}
application {
mainClass.set("store.service.App.java")
}
java {
sourceCompatibility = JavaVersion.toVersion("1.8")
targetCompatibility = JavaVersion.toVersion("1.8")
}
repositories {
mavenCentral()
jcenter()
}
dependencies {
/*
8 Generating a Micronaut Application's Native Image with GraalVM
annotationProcessor("io.micronaut:micronaut-graal")
*/
implementation("io.micronaut:micronaut-validation")
implementation("io.micronaut:micronaut-runtime")
implementation("io.micronaut.grpc:micronaut-grpc-server-runtime:2.2.0")
implementation("io.micronaut.mongodb:micronaut-mongo-reactive:3.1.0")
implementation("org.jetbrains.kotlin:kotlin-reflect")
implementation("org.jetbrains.kotlin:kotlin-stdlib")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor:1.4.2")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-protobuf:1.0.1")
implementation("io.grpc:grpc-protobuf-lite:1.33.1")
implementation("io.grpc:grpc-protobuf:1.33.1")
implementation("io.grpc:grpc-kotlin-stub-lite:0.2.1")
implementation("io.grpc:grpc-netty:1.33.1")
implementation("com.google.protobuf:protobuf-java:3.14.0")
implementation("com.google.guava:guava:30.0-jre")
implementation("javax.annotation:javax.annotation-api:1.3.2")
implementation("org.slf4j:slf4j-simple:2.0.0-alpha1")
testImplementation("io.kotest:kotest-runner-junit5-jvm:4.2.5")
}
tasks {
withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "11"
}
}
withType<Test> {
useJUnitPlatform()
}
}
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.11.4"
}
plugins {
id("grpc") {
artifact = "io.grpc:protoc-gen-grpc-java:1.25.0"
}
id("grpckt") {
artifact = "io.grpc:protoc-gen-grpc-kotlin:0.2.0:jdk7@jar"
}
}
generateProtoTasks {
ofSourceSet("main").forEach {
it.plugins {
id("grpc")
id("grpckt")
}
}
}
}
在您的GrpcdemoServiceGrpcK中,您将找到ImplBase。从此ImplBase实现具体的grpc服务。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。