引起原因:java.lang.ClassNotFoundException:com.google.api.gax.rpc



我在java中使用AWS Lambda,并试图从gcp pubsub队列中提取。

private static SubscriberStub getSubscriber() throws IOException {
SubscriberStubSettings subscriberStubSettings =
SubscriberStubSettings.newBuilder()
.setCredentialsProvider(new GcpCredentialsUtil().getCredentialsProvider())
.setTransportChannelProvider(
SubscriberStubSettings.defaultGrpcTransportProviderBuilder()
.setMaxInboundMessageSize(20 * 1024 * 1024) // 20MB (maximum message size).
.setKeepAliveWithoutCalls(false)
.build())
.build();
return GrpcSubscriberStub.create(subscriberStubSettings);
}

我正在使用maven,并添加了依赖项:

<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>libraries-bom</artifactId>
<version>26.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-pubsub</artifactId>
</dependency>
</dependencies>

当我尝试在本地运行Lambda时,我出现了错误:

com/google/api/gax/rpc/TransportChannelProvider: java.lang.NoClassDefFoundError
java.lang.NoClassDefFoundError: com/google/api/gax/rpc/TransportChannelProvider
at lambdas.teams.ProcessMessageLambda.handleRequest(ProcessMessageLambda.java:33)
at lambdas.teams.ProcessMessageLambda.handleRequest(ProcessMessageLambda.java:15)
Caused by: java.lang.ClassNotFoundException: com.google.api.gax.rpc.TransportChannelProvider
at java.net.URLClassLoader.findClass(URLClassLoader.java:387)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
... 2 more

TransportChannelProvider存在于我的~/m2/存储库中,但我想它在运行时不存在。有什么想法吗?

添加maven shade插件解决了一个问题:

<build>
<finalName>lambdas</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.3</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
</transformers>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

相关内容

最新更新