grpc×jib×skaffoldで少し詰まった
grpcを使って開発してるマイクロサービスでjibとskaffold使ってバリバリローカル開発しようとしてたら詰まった ちなみにフレームワークはktor
skaffold dev コマンドでskaffoldを起動すると下記のエラーが
エラー: シンボルを見つけられません @javax.annotation.Generated( ^ シンボル: クラス Generated 場所: パッケージ javax.annotation
protocol buffersで作成したGRPC用のJavaファイルについているアノテーション
@javax.annotation.Generated
が見つけられませんと出ている
IntelliJから普通に gradle run
している分には何も問題ないのだが
解決方法はdependenciesにjavax.annotation-apiを追加すれば良い
compile("javax.annotation:javax.annotation-api:1.3.2")
build.gradle.kts
import com.google.protobuf.gradle.* import org.gradle.kotlin.dsl.provider.gradleKotlinDslOf import org.jetbrains.kotlin.gradle.dsl.Coroutines import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import com.google.cloud.tools.jib.image.ImageFormat val ktor_version: String by project val kotlin_version: String by project val logback_version: String by project plugins { application kotlin("jvm") version "1.3.21" java id("com.google.protobuf") version "0.8.8" id("com.google.cloud.tools.jib") version "1.0.2" } jib { from { image = "openjdk:8" } to { image = "yoshi10321/app01" } container { jvmFlags = listOf("-Xms512m", "-Xdebug") args = listOf() ports = listOf("8080/tcp") } } group = "graphql" version = "0.0.1" application { mainClassName = "io.ktor.server.netty.EngineMain" } repositories { mavenLocal() jcenter() maven { url = uri("https://kotlin.bintray.com/ktor") url = uri("https://plugins.gradle.org/m2/") } mavenCentral() } dependencies { compile("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version") compile("io.ktor:ktor-server-netty:$ktor_version") compile("ch.qos.logback:logback-classic:$logback_version") compile("io.ktor:ktor-server-core:$ktor_version") compile("io.ktor:ktor-gson:$ktor_version") compile("io.ktor:ktor-client-core:$ktor_version") compile("io.ktor:ktor-client-core-jvm:$ktor_version") compile("io.ktor:ktor-client-cio:$ktor_version") testCompile("io.ktor:ktor-server-tests:$ktor_version") compile("io.grpc:grpc-netty-shaded:1.19.0") compile("io.grpc:grpc-protobuf:1.19.0") compile("io.grpc:grpc-stub:1.19.0") compile("com.google.protobuf:protobuf-java:3.6.1") compile("javax.annotation:javax.annotation-api:1.3.2") } kotlin.sourceSets["main"].kotlin.srcDirs("src") kotlin.sourceSets["test"].kotlin.srcDirs("test") sourceSets["main"].resources.srcDirs("resources") sourceSets["test"].resources.srcDirs("testresources") sourceSets["main"].java { srcDirs("build/generated/source/proto/main/grpc") srcDirs("build/generated/source/proto/main/java") } protobuf { protoc { // The artifact spec for the Protobuf Compiler artifact = "com.google.protobuf:protoc:3.6.1" } plugins { // Optional: an artifact spec for a protoc plugin, with "grpc" as // the identifier, which can be referred to in the "plugins" // container of the "generateProtoTasks" closure. id("grpc") { artifact = "io.grpc:protoc-gen-grpc-java:1.15.1" } } generateProtoTasks { ofSourceSet("main").forEach { it.plugins { // Apply the "grpc" plugin whose spec is defined above, without options. id("grpc") } } } }
jibのfrom imageにopenjdk使ってるけど他のにしたらdependencies追加しなくてもなんとかならないかなー