首页 > 解决方案 > BigQuery:java.lang.NoClassDefFoundError:com/google/api/gax/retrying/ExceptionRetryAlgorithm

问题描述

我正在从事一个 Google-Dataflow java 项目。我正在尝试在管道的初始化中创建和更新 BigQuery 表,因此为了开始我尝试以这种方式实例化 BigQuery Java 客户端:

 BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

运行时,它给我带来了以下异常:

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/api/gax/retrying/ExceptionRetryAlgorithm
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    at com.google.cloud.BaseService.<clinit>(BaseService.java:48)
    at com.google.cloud.bigquery.BigQueryOptions$DefaultBigQueryFactory.create(BigQueryOptions.java:46)
    at com.google.cloud.bigquery.BigQueryOptions$DefaultBigQueryFactory.create(BigQueryOptions.java:40)
    at com.google.cloud.ServiceOptions.getService(ServiceOptions.java:426)
    at com.mydomain.Analysis.main(Analysis.java:359)

Caused by: java.lang.ClassNotFoundException: com.google.api.gax.retrying.ExceptionRetryAlgorithm
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 17 more

这是我的 pom.xml:

<properties>
    <beam.version>2.19.0</beam.version>
</properties>


<dependencies>

    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-collections4 -->
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-collections4</artifactId>
        <version>4.0</version>
    </dependency>

    <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-bigquery</artifactId>
        <version>1.110.0</version>
    </dependency>


    <!-- Beam -->
    <dependency>
        <groupId>org.apache.beam</groupId>
        <artifactId>beam-sdks-java-core</artifactId>
        <version>${beam.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.beam</groupId>
        <artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
        <version>${beam.version}</version>
        <exclusions>
            <exclusion>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.apache.beam</groupId>
        <artifactId>beam-sdks-java-extensions-google-cloud-platform-core</artifactId>
        <version>${beam.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.beam</groupId>
        <artifactId>beam-runners-google-cloud-dataflow-java</artifactId>
        <version>${beam.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.beam</groupId>
        <artifactId>beam-sdks-java-io-jdbc</artifactId>
        <version>${beam.version}</version>
    </dependency>
</dependencies>

我错过了什么?

标签: javagoogle-cloud-dataflow

解决方案


从错误看来,缺少一些包含 com.google.api.gax.retrying.ExceptionRetryAlgorithm.java 类的 jar。

一个快速的谷歌搜索指示我将以下依赖项添加到 pom.xml 中。这个 gax jar 包含 ExceptionRetryAlgorithm 类。

    <dependency>
        <groupId>com.google.api</groupId>
        <artifactId>gax</artifactId>
        <version>0.14.0</version>
    </dependency>

希望将上述依赖项添加到您的 pom 中,应该可以解决问题。

问候,舒瓦迪普


推荐阅读