Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用Azure存储相关java API时引发异常java.lang.NoSuchMethodError_Java_Amazon Web Services_Azure_Maven_Netty - Fatal编程技术网

调用Azure存储相关java API时引发异常java.lang.NoSuchMethodError

调用Azure存储相关java API时引发异常java.lang.NoSuchMethodError,java,amazon-web-services,azure,maven,netty,Java,Amazon Web Services,Azure,Maven,Netty,将此线程留给可能遇到相同问题的其他人 我正试图通过以下代码从Azure容器中读取blob: public static void main(String[] args) { String connectStr = "it's a workable connection string..."; // Create a BlobServiceClient object which will be used to create a container client BlobSe

将此线程留给可能遇到相同问题的其他人

我正试图通过以下代码从Azure容器中读取blob:

public static void main(String[] args) {
    String connectStr = "it's a workable connection string...";
    // Create a BlobServiceClient object which will be used to create a container client
    BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().connectionString(connectStr).buildClient();
    String containerName = "eugenecontainer";
    BlobContainerClient blobContainerClient = blobServiceClient.getBlobContainerClient(containerName);
    for (BlobItem blobItem: blobContainerClient.listBlobs()){
        System.out.println(blobItem.getName());
    }
}
但是,当它执行blobContainerClient.listBlobs时,会引发以下异常:

Exception in thread "main" java.lang.NoSuchMethodError: io.netty.bootstrap.Bootstrap.config()Lio/netty/bootstrap/BootstrapConfig;
我使用maven作为构建工具


这里发生了什么?

我终于找到了解决方案,它是关于maven依赖冲突的。不同版本中有多个依赖项依赖于netty

我在maven中添加了aws和azure依赖项,如下所示:

<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-java-sdk</artifactId>
  <version>1.11.327</version>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-storage-blob</artifactId>
  <version>12.0.0</version>
</dependency>
正如我们所看到的,azure和aws确实依赖于netty,而netty的版本是不同的。因此,问题在于解决冲突

据介绍,

由于Maven以传递方式解析依赖项,因此 要包含在项目类路径中的不需要的依赖项。对于 例如,某个较旧的jar可能存在安全问题或 与您正在使用的Java版本不兼容。为了解决这个问题,, Maven允许您排除特定的依赖项。排除已设置 在POM中的特定依赖项上,并针对特定的 groupId和artifactId。当您构建项目时,该工件 不会通过依赖关系添加到项目的类路径 其中宣布了排除

我们需要排除netty 4.1.17,这样它就不会被添加到项目的类路径中,并显式地将netty设置为azure

    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk</artifactId>
      <version>1.11.327</version>
      <exclusions>
        <exclusion>
          <artifactId>*</artifactId>
          <groupId>io.netty</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-blob</artifactId>
      <version>12.0.0</version>
    </dependency>
    <dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty-all</artifactId>
      <version>4.1.42.Final</version>
    </dependency>

通过将上述依赖项添加到pom.xml,azure可以正常工作

我终于找到了解决方案,它是关于maven依赖冲突的。不同版本中有多个依赖项依赖于netty

我在maven中添加了aws和azure依赖项,如下所示:

<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-java-sdk</artifactId>
  <version>1.11.327</version>
</dependency>
<dependency>
  <groupId>com.azure</groupId>
  <artifactId>azure-storage-blob</artifactId>
  <version>12.0.0</version>
</dependency>
正如我们所看到的,azure和aws确实依赖于netty,而netty的版本是不同的。因此,问题在于解决冲突

据介绍,

由于Maven以传递方式解析依赖项,因此 要包含在项目类路径中的不需要的依赖项。对于 例如,某个较旧的jar可能存在安全问题或 与您正在使用的Java版本不兼容。为了解决这个问题,, Maven允许您排除特定的依赖项。排除已设置 在POM中的特定依赖项上,并针对特定的 groupId和artifactId。当您构建项目时,该工件 不会通过依赖关系添加到项目的类路径 其中宣布了排除

我们需要排除netty 4.1.17,这样它就不会被添加到项目的类路径中,并显式地将netty设置为azure

    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk</artifactId>
      <version>1.11.327</version>
      <exclusions>
        <exclusion>
          <artifactId>*</artifactId>
          <groupId>io.netty</groupId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-blob</artifactId>
      <version>12.0.0</version>
    </dependency>
    <dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty-all</artifactId>
      <version>4.1.42.Final</version>
    </dependency>

通过将上述依赖项添加到pom.xml,azure可以正常工作

如果您使用的是如下所述的spring引导依赖项,请排除azure core http netty,并为azure core http okhttp添加新的独立依赖项,如下所示

com.azure.spring azure spring启动存储 com.azure azure核心http netty com.azure azure核心http-okhttp 1.2.1
如果您使用的是如下所述的spring引导依赖项,请排除azure core http netty,并为azure core http okhttp添加新的独立依赖项,如下所示

com.azure.spring azure spring启动存储 com.azure azure核心http netty com.azure azure核心http-okhttp 1.2.1
如果jar已经存在于类路径上,因为它是由服务器在运行时提供的,那么只需告诉maven提供了工件。如果jar已经存在于类路径上,因为它是由服务器在运行时提供的,那么只需告诉maven提供了工件。