pact-foundation / pact-jvm

JVM version of Pact. Enables consumer driven contract testing, providing a mock service and DSL for the consumer project, and interaction playback and verification for the service provider project.
https://docs.pact.io
Apache License 2.0
1.08k stars 479 forks source link

consumer is incompatible with grpc-protobuf version 1.59.0 #1816

Closed austin226 closed 3 weeks ago

austin226 commented 1 month ago

When using:

the following error occurs:

java.lang.NoClassDefFoundError: io/grpc/internal/AbstractManagedChannelImplBuilder
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(Unknown Source)
    at java.base/java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(Unknown Source)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(Unknown Source)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(Unknown Source)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
    at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Unknown Source)
    at io.grpc.ManagedChannelRegistry.getHardCodedClasses(ManagedChannelRegistry.java:142)
    at io.grpc.ManagedChannelRegistry.getDefaultRegistry(ManagedChannelRegistry.java:103)
    at io.grpc.ManagedChannelProvider.provider(ManagedChannelProvider.java:43)
    at io.grpc.ManagedChannelBuilder.forTarget(ManagedChannelBuilder.java:86)
    at io.pact.plugins.jvm.core.DefaultPluginManager.tryInitPlugin(PluginManager.kt:884)
    at io.pact.plugins.jvm.core.DefaultPluginManager.initialisePlugin(PluginManager.kt:866)
    at io.pact.plugins.jvm.core.DefaultPluginManager.loadPlugin(PluginManager.kt:419)
    at au.com.dius.pact.consumer.dsl.PactBuilder.usingPlugin(PactBuilder.kt:113)

Additionally,

Did not find an entry for 'protobuf/transport/grpc' in the plugin registry
au.com.dius.pact.consumer.InvalidMockServerRegistryEntry: Did not find an entry for 'protobuf/transport/grpc' in the plugin registry
    at app//au.com.dius.pact.consumer.PluginMockServer.start(PluginMockServer.kt:41)
    at app//au.com.dius.pact.consumer.BaseMockServer.runAndWritePact(MockHttpServer.kt:141)
austin226 commented 1 month ago

May depend on core changes - https://github.com/pact-foundation/pact-plugins/issues/72

rholshausen commented 1 month ago

Looks like that refactor upgraded gRPC libs from 1.56.1 to 1.64.0, and 1.59.0 has a breaking change notice https://github.com/grpc/grpc-java/releases/tag/v1.59.0

You could try add an exclusion on pact-driver core 0.4.2 and then add pact-driver core 0.4.1 as a dependency

rholshausen commented 1 month ago

Oh, wait, that refactor has not been released yet. Would that fix your issue (upgrading gRPC libs to 1.64)?

austin226 commented 3 weeks ago

I see pact driver 0.5.0 was released - matching grpc libs to 1.66 here might fix the issue

rholshausen commented 3 weeks ago

4.6.14 and 4.5.13 have been released which use pact driver 0.5.1

austin226 commented 3 weeks ago

Upgrading to 4.6.14 solved my issue - thanks!