java.lang.NoSuchMethodError : com. google.api.client.http.HttpTransport.isMtls()Z

标签 java google-app-engine google-cloud-storage google-api-java-client

我有一个使用 java8 部署在 appengine 上的应用程序。
最近,当我尝试部署时,我在运行时收到此错误:

Uncaught exception from servlet
java.lang.NoSuchMethodError: com.google.api.client.http.HttpTransport.isMtls()Z
    at com.google.api.services.storage.Storage$Builder.chooseEndpoint(Storage.java:11151)
    at com.google.api.services.storage.Storage$Builder.<init>(Storage.java:11184)
    at com.google.cloud.storage.spi.DefaultStorageRpc.<init>(DefaultStorageRpc.java:105)
    at com.google.cloud.storage.StorageOptions$DefaultStorageRpcFactory.create(StorageOptions.java:49)
    at com.google.cloud.storage.StorageOptions$DefaultStorageRpcFactory.create(StorageOptions.java:43)
    at com.google.cloud.ServiceOptions.getRpc(ServiceOptions.java:482)
    at com.google.cloud.storage.StorageImpl.<init>(StorageImpl.java:93)
    at com.google.cloud.storage.StorageOptions$DefaultStorageFactory.create(StorageOptions.java:39)
    at com.google.cloud.storage.StorageOptions$DefaultStorageFactory.create(StorageOptions.java:33)
    at com.google.cloud.ServiceOptions.getService(ServiceOptions.java:469)
这是我的 pom.xml :
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <packaging>war</packaging>
    <version>1.1-SNAPSHOT</version>

    <groupId>my.com.myapp</groupId>
    <artifactId>myapp</artifactId>

    <repositories>
        <repository>
            <id>local-maven-repo</id>
            <url>file:///${project.basedir}/local-maven-repo</url>
        </repository>
    </repositories>
    <!-- [START set_versions] -->
    <properties>
        <appengine.sdk.version>1.9.46</appengine.sdk.version>
        <google-api-client.version>1.21.0</google-api-client.version>

        <objectify.version>5.1.5</objectify.version>
        <guava.version>18.0</guava.version>

        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <prerequisites>
        <maven>3.1.0</maven>
    </prerequisites>

    <dependencies>
        <dependency>
            <groupId>com.google.appengine</groupId>
            <artifactId>appengine-api-1.0-sdk</artifactId>
            <version>${appengine.sdk.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <type>jar</type>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.google.appengine.tools</groupId>
            <artifactId>appengine-gcs-client</artifactId>
            <version>RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.apis/google-api-services-storage -->
        <dependency>
            <groupId>com.google.apis</groupId>
            <artifactId>google-api-services-storage</artifactId>
            <version>RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.google.apis</groupId>
            <artifactId>google-api-services-pubsub</artifactId>
            <version>RELEASE</version>
        </dependency>


        <!-- slf4j API frontend binding with JUL backend -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>1.7.7</version>
        </dependency>


        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>google-cloud-pubsub</artifactId>
            <version>0.8.3-alpha</version>
        </dependency>

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

        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>google-cloud-storage</artifactId>
            <version>0.8.3-beta</version>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
        </dependency>

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

        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.7</version>
        </dependency>
        <!-- for comparing jsons check if soppurted on appengine for tests only-->
        <dependency>
            <groupId>org.skyscreamer</groupId>
            <artifactId>jsonassert</artifactId>
            <version>1.4.0</version>
            <scope>test</scope>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.springframework/spring-core for the integration reading from WEB-INF-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>2.5.6</version>
            <!--        <scope>integration</scope> -->
        </dependency>

        <!--added for pdf...-->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging-api -->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging-api</artifactId>
            <version>1.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging-adapters -->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging-adapters</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>fontbox</artifactId>
            <version>1.8.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.pdfbox</groupId>
            <artifactId>pdfbox</artifactId>
            <version>1.8.0-SNAPSHOT</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/fluent-hc -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>fluent-hc</artifactId>
            <version>4.5.3</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpmime -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpmime</artifactId>
            <version>4.5.3</version>
        </dependency>

        <dependency>
            <groupId>com.github.wnameless</groupId>
            <artifactId>json-flattener-java7</artifactId>
            <version>0.4.0</version>
        </dependency>


    </dependencies>

    <build>
        <!-- for hot reload of the web application -->
        <outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/classes</outputDirectory>
        <plugins>
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>appengine-maven-plugin</artifactId>
                <version>2.2.0</version>
                <configuration>
                    <projectId>my-project-id</projectId>
                    <version>my-version</version>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.3.7.v20160115</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <version>3.3</version>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>

            <!--integration-test-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <parallel>methods</parallel>
                    <threadCount>10</threadCount>
                </configuration>
                <executions>
                    <execution>
                        <id>integration-test</id>
                        <goals>
                            <goal>integration-test</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>verify</id>
                        <goals>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>


    </build>
</project>
我会注意到,在过去已经完成部署的电脑上部署时,部署效果很好,但是当第一次在新电脑上部署时,我在运行时遇到上述错误
我假设我需要更改版本
<dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-storage</artifactId>
    <version>RELEASE</version>
</dependency>
应该是什么版本?

最佳答案

通常,当类路径中有同一个类的两个版本时,就会发生这种异常。可能发生的一些原因是:

  • 您的依赖项包括两个版本的 google-api-client。一世
    没有看到任何直接依赖,所以它可能是一个传递
    依赖性。您可以运行 mvn dependency:tree 并寻找google-api-client依赖项和 exclude其中一个 jar
  • 您正在打包提供的
    依赖性。可能是应用引擎已经包含这样的 jar
    使用 HttpTransport,如果您还包括这个 HttpTransport 类
    进入你的人工制品,它会产生问题。要修复此标识
    哪个依赖项包含 HttpTransport 类并在您的 pom.xml 中
    添加提供给它
  • 此类包含在某个生成的存储库中某个旧 jar 的类路径中。如果是这种情况,您所要做的就是重置您的环境。再次克隆存储库并重新初始化应用引擎
  • 关于java.lang.NoSuchMethodError : com. google.api.client.http.HttpTransport.isMtls()Z,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65826798/

    相关文章:

    java - 如何检查 recyclerView 是否为空 Espresso

    javascript - 为什么我的表单中的值没有传递到 Google 代码?

    python - facebook-graph sdk 无法处理 unicode 字符

    javascript - 如何使用 Node.js 更改 Google Cloud Storage 中的文件元数据

    python-3.x - 从 google.cloud 导入存储失败 : ImportError: No module named google. 云

    java - 是否需要带有 Androids XMLSerializer 的 startDocument()?

    java - Hibernate映射保存问题

    java - Google App Engine 在构建 Web 应用程序方面有多好?

    google-app-engine - Appengine API 调用 : Application restrictions: HTTP referrers (websites) or IP addresses (web servers, cron 作业等)

    scala - 在Dataproc上使用Spark,如何从每个分区单独写入GCS?