akka / akka-grpc

Akka gRPC
https://doc.akka.io/docs/akka-grpc/
Other
431 stars 123 forks source link

NoClassDefFoundError when upgrading from 1.0.2 to 1.1.1 #1292

Closed jtjeferreira closed 3 years ago

jtjeferreira commented 3 years ago

Versions used

Akka-grpc version: 1.1.1 sbt version: 1.4.7

Expected Behavior

I have a project compiling correctly with akka-grpc 1.0.2. I expected that when upgrading to 1.1.1 the compilation would also succeed

Actual Behavior

Instead I have the exception:

java.lang.NoClassDefFoundError: com/google/protobuf/compiler/PluginProtos$CodeGeneratorResponse$Feature
  | => nat protocgen.CodeGenResponse.toCodeGeneratorResponse(CodeGenResponse.scala:12)
        at protocgen.CodeGenResponse.toCodeGeneratorResponse$(CodeGenResponse.scala:7)
    at protocgen.CodeGenResponse$Internal$Success.toCodeGeneratorResponse(CodeGenResponse.scala:36)
    at protocgen.CodeGenApp.run(CodeGenApp.scala:46)
    at protocgen.CodeGenApp.run$(CodeGenApp.scala:39)
    at scalapb.ScalaPbCodeGenerator$.run(ScalaPbCodeGenerator.scala:11)
    at protocgen.CodeGenApp.run(CodeGenApp.scala:31)
    at protocgen.CodeGenApp.run$(CodeGenApp.scala:30)
    at scalapb.ScalaPbCodeGenerator$.run(ScalaPbCodeGenerator.scala:11)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at protocbridge.SandboxedJvmGenerator$$anon$1.run(Generator.scala:119)
    at protocbridge.frontend.PluginFrontend$.$anonfun$runWithBytes$1(PluginFrontend.scala:52)
    at scala.util.Try$.apply(Try.scala:213)
    at protocbridge.frontend.PluginFrontend$.runWithBytes(PluginFrontend.scala:52)
    at protocbridge.frontend.PluginFrontend$.runWithInputStream(PluginFrontend.scala:122)
    at protocbridge.frontend.PosixPluginFrontend$.$anonfun$prepare$2(PosixPluginFrontend.scala:39)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
    at scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$1$$anon$2.block(ExecutionContextImpl.scala:75)
    at java.base/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3118)
    at scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$1.blockOn(ExecutionContextImpl.scala:87)
    at scala.concurrent.package$.blocking(package.scala:146)
    at protocbridge.frontend.PosixPluginFrontend$.$anonfun$prepare$1(PosixPluginFrontend.scala:37)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
    at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:659)
    at scala.util.Success.$anonfun$map$1(Try.scala:255)
    at scala.util.Success.map(Try.scala:213)
    at scala.concurrent.Future.$anonfun$map$1(Future.scala:292)
    at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:33)
    at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:33)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
    at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

Relevant logs

[debug] Attempting to fetch com.thesamet.scalapb % compilerplugin_2.12 % 0.10.11. This operation may fail.
[debug] Files retrieved for com.thesamet.scalapb % compilerplugin_2.12 % 0.10.11:
[debug] /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/com/thesamet/scalapb/compilerplugin_2.12/0.10.11/compilerplugin_2.12-0.10.11.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.4/scala-library-2.13.4.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.11.4/protobuf-java-3.11.4.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-collection-compat_2.12/2.3.2/scala-collection-compat_2.12-2.3.2.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/com/thesamet/scalapb/protoc-gen_2.12/0.9.2/protoc-gen_2.12-0.9.2.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/com/thesamet/scalapb/protoc-bridge_2.12/0.9.2/protoc-bridge_2.12-0.9.2.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/dev/dirs/directories/23/directories-23.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/com/thesamet/scalapb/compilerplugin_2.12/0.10.11/compilerplugin_2.12-0.10.11.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.4/scala-library-2.13.4.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.11.4/protobuf-java-3.11.4.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-collection-compat_2.12/2.3.2/scala-collection-compat_2.12-2.3.2.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/com/thesamet/scalapb/protoc-gen_2.12/0.9.2/protoc-gen_2.12-0.9.2.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/com/thesamet/scalapb/protoc-bridge_2.12/0.9.2/protoc-bridge_2.12-0.9.2.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/dev/dirs/directories/23/directories-23.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/com/thesamet/scalapb/compilerplugin_2.12/0.10.11/compilerplugin_2.12-0.10.11.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/scala-library/2.13.4/scala-library-2.13.4.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.11.4/protobuf-java-3.11.4.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/org/scala-lang/modules/scala-collection-compat_2.12/2.3.2/scala-collection-compat_2.12-2.3.2.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/com/thesamet/scalapb/protoc-gen_2.12/0.9.2/protoc-gen_2.12-0.9.2.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/com/thesamet/scalapb/protoc-bridge_2.12/0.9.2/protoc-bridge_2.12-0.9.2.jar, /home/joao/.cache/coursier/v1/https/repo1.maven.org/maven2/dev/dirs/directories/23/directories-23.jar
[debug] Invalidating cache (input changed)
[info] Compiling 16 protobuf files to /home/joao/git/nezasa/platform/modules/ng-model/target/scala-2.13/src_managed/main
[debug] protoc options:
[debug] Compiling schema (REDACTED)
[debug] Executing protoc with [--plugin=protoc-gen-jvm_0=/tmp/protocbridge15466369164600011720, --jvm_0_out=/home/joao/git/nezasa/platform/modules/ng-model/target/scala-2.13/src_managed/main, --jvm_0_opt=flat_package,grpc,no_lenses, -I/home/joao/git/nezasa/platform/modules/ng-model/src/main/protobuf, -I/home/joao/git/nezasa/platform/modules/ng-model/target/protobuf_external, REDACTED] and extraEnv=Vector((SCALAPB_SECONDARY_OUTPUT_DIR,/tmp/protocbridge-secondary14532203326863953786))
--jvm_0_out: java.lang.NoClassDefFoundError: com/google/protobuf/compiler/PluginProtos$CodeGeneratorResponse$Feature
  | => nat protocgen.CodeGenResponse.toCodeGeneratorResponse(CodeGenResponse.scala:12)
        at protocgen.CodeGenResponse.toCodeGeneratorResponse$(CodeGenResponse.scala:7)
    at protocgen.CodeGenResponse$Internal$Success.toCodeGeneratorResponse(CodeGenResponse.scala:36)
    at protocgen.CodeGenApp.run(CodeGenApp.scala:46)
    at protocgen.CodeGenApp.run$(CodeGenApp.scala:39)
    at scalapb.ScalaPbCodeGenerator$.run(ScalaPbCodeGenerator.scala:11)
    at protocgen.CodeGenApp.run(CodeGenApp.scala:31)
    at protocgen.CodeGenApp.run$(CodeGenApp.scala:30)
    at scalapb.ScalaPbCodeGenerator$.run(ScalaPbCodeGenerator.scala:11)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at protocbridge.SandboxedJvmGenerator$$anon$1.run(Generator.scala:119)
    at protocbridge.frontend.PluginFrontend$.$anonfun$runWithBytes$1(PluginFrontend.scala:52)
    at scala.util.Try$.apply(Try.scala:213)
    at protocbridge.frontend.PluginFrontend$.runWithBytes(PluginFrontend.scala:52)
    at protocbridge.frontend.PluginFrontend$.runWithInputStream(PluginFrontend.scala:122)
    at protocbridge.frontend.PosixPluginFrontend$.$anonfun$prepare$2(PosixPluginFrontend.scala:39)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
    at scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$1$$anon$2.block(ExecutionContextImpl.scala:75)
    at java.base/java.util.concurrent.ForkJoinPool.managedBlock(ForkJoinPool.java:3118)
    at scala.concurrent.impl.ExecutionContextImpl$DefaultThreadFactory$$anon$1.blockOn(ExecutionContextImpl.scala:87)
    at scala.concurrent.package$.blocking(package.scala:146)
    at protocbridge.frontend.PosixPluginFrontend$.$anonfun$prepare$1(PosixPluginFrontend.scala:37)
    at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
    at scala.concurrent.Future$.$anonfun$apply$1(Future.scala:659)
    at scala.util.Success.$anonfun$map$1(Try.scala:255)
    at scala.util.Success.map(Try.scala:213)
    at scala.concurrent.Future.$anonfun$map$1(Future.scala:292)
    at scala.concurrent.impl.Promise.liftedTree1$1(Promise.scala:33)
    at scala.concurrent.impl.Promise.$anonfun$transform$1(Promise.scala:33)
    at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:64)
    at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1426)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)

[error] stack trace is suppressed; run last ngModel / Compile / protocGenerate for the full output
[error] (ngModel / Compile / protocGenerate) protoc returned exit code: 1
[error] Total time: 1 s, completed Mar 12, 2021, 11:42:19 AM

Reproducible Test Case

I dont have one except my work project

raboof commented 3 years ago

Thanks for sharing! I don't have a direct explanation, but I do observe that class was added between protobuf-java 3.11.5 and 2.12.0. Could it be you have some older version of protobuf-java hanging around in your build somehow?

jtjeferreira commented 3 years ago

Thanks for sharing! I don't have a direct explanation, but I do observe that class was added between protobuf-java 3.11.5 and 2.12.0.

You meant 3.12.0 right?

Could it be you have some older version of protobuf-java hanging around in your build somehow?

I dont think so: image

jtjeferreira commented 3 years ago

The above picture was from plugins dependencies. In the actual project I indeed have 3.11.4...

image

raboof commented 3 years ago

You meant 3.12.0 right?

Oops, yes ;)

I dont think so:

I'm not familiar with that tool but that at least looks good ;).

The above picture was from plugins dependencies. In the actual project I indeed have 3.11.4...

That might make sense, since the code generation is done in the build. It is also 'sandboxed', though I'm not entirely sure how that works exactly.

Unfortunately I don't think I can be of much further help without a reproducer project...

jtjeferreira commented 3 years ago

I'm not familiar with that tool but that at least looks good ;).

It is dependencyBrowseGraph from https://github.com/sbt/sbt-dependency-graph

Unfortunately I don't think I can be of much further help without a reproducer project...

It might take me a while to reduce this to a reproducer, but I will try next week... Meanwhile maybe @thesamet from scalapb you might have an hint?

thesamet commented 3 years ago

@jtjeferreira please provide a minimal reproducible example. We can't tell what's in your build is causing it if we don't see your build.

jtjeferreira commented 3 years ago

This no longer happens in 2.x...