Не удается создать Azure BlobContainerClient, так как я получаю java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/TSFBuilder

#java #azure #azure-blob-storage

#java #azure #azure-blob-хранилище

Вопрос:

Я столкнулся с ошибкой при попытке создать Azure blobConatinerClient, используя имеющиеся у меня учетные данные.

учетные данные — это instanceOf StorageSharedKeyCredential, а конечная точка — instanceOf String

Это и есть код

  public BlobContainerClient initBlobClient() {
    BlobContainerClient blobContainerClient;

    StorageSharedKeyCredential credential = new StorageSharedKeyCredential(ACCOUNT_NAME, ACCOUNT_KEY);

    String endpoint = String.format(Locale.ROOT, "https://test.blob.core.windows.net");

// Getting the ClassDefError here
    BlobServiceClient storageClient = new BlobServiceClientBuilder().endpoint(endpoint).credential(credential).buildClient();

    blobContainerClient = storageClient.getBlobContainerClient(CONTAINTER_NAME);

    return blobContainerClient;
  }
 

и это трассировка стека, которую это вызывает

     at com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:122)
    at com.azure.core.util.serializer.JacksonAdapter.<init>(JacksonAdapter.java:76)
    at com.azure.core.util.serializer.JacksonAdapter.createDefaultSerializerAdapter(JacksonAdapter.java:109)
    at com.azure.core.http.rest.RestProxy.createDefaultSerializer(RestProxy.java:615)
    at com.azure.core.http.rest.RestProxy.create(RestProxy.java:667)
    at com.azure.storage.blob.implementation.ServicesImpl.<init>(ServicesImpl.java:58)
    at com.azure.storage.blob.implementation.AzureBlobStorageImpl.<init>(AzureBlobStorageImpl.java:216)
    at com.azure.storage.blob.implementation.AzureBlobStorageBuilder.build(AzureBlobStorageBuilder.java:93)
    at com.azure.storage.blob.BlobServiceAsyncClient.<init>(BlobServiceAsyncClient.java:108)
    at com.azure.storage.blob.BlobServiceClientBuilder.buildAsyncClient(BlobServiceClientBuilder.java:109)
    at com.azure.storage.blob.BlobServiceClientBuilder.buildClient(BlobServiceClientBuilder.java:82)
 

И это зависимости Azure, которые у меня есть. Я также добавил Джексона, поскольку в одном из комментариев StackOverflow говорилось, что это решит проблему, но это не так.

     <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.12.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.azure/azure-storage-blob -->
    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-blob</artifactId>
      <version>12.9.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.azure/azure-core -->
    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-core</artifactId>
      <version>1.3.0</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/io.projectreactor/reactor-core -->
    <dependency>
      <groupId>io.projectreactor</groupId>
      <artifactId>reactor-core</artifactId>
      <version>3.3.4.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>com.microsoft.azure</groupId>
      <artifactId>azure-storage</artifactId>
      <version>8.6.3</version>
    </dependency>

    <dependency>
      <groupId>com.microsoft.azure</groupId>
      <artifactId>azure</artifactId>
      <version>1.33.0</version>
    </dependency>
 

Может кто-нибудь указать, если чего-то не хватает, или мне нужно что-то изменить здесь?

Ответ №1:

azure-storage-blob Для Azure Storage Blob SDK требуется только зависимость от.

 <dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-storage-blob</artifactId>
    <version>12.9.0</version>
</dependency>
 

А вот и пример создания контейнера.

 // From the Azure portal, get your Storage account's name and account key. 
String accountName = "";
String accountKey = "";

// Use your Storage account's name and key to create a credential object; this is used to access your account.
StorageSharedKeyCredential credential = new StorageSharedKeyCredential(accountName, accountKey);

// From the Azure portal, get your Storage account blob service URL endpoint.
// The URL typically looks like this:
String endpoint = String.format(Locale.ROOT, "https://%s.blob.core.windows.net", accountName);

// Create a BlobServiceClient object that wraps the service endpoint, credential and a request pipeline.
BlobServiceClient storageClient = new BlobServiceClientBuilder().endpoint(endpoint).credential(credential).buildClient();

// Create the container and return a container client object
BlobContainerClient containerClient = blobServiceClient.createBlobContainer(containerName);
 

Пожалуйста, попробуйте следовать этому быстрому началу, чтобы создать проект maven.

Комментарии:

1. Привет, @Дипак Гопал. Вы пытались создать Azure BlobConatinerClient с образцом? Полезен ли мой ответ?

2. Привет @Памела Пэн, спасибо за ответ. Я ссылался на руководство по быстрому запуску Azure для подключения к BlobServiceClient, но я все равно получаю NoClassDefError

3. Не могли бы вы поделиться дополнительным кодом? Я не могу воспроизвести ошибку с помощью just BlobServiceClient storageClient = new BlobServiceClientBuilder().endpoint(endpoint).credential(credential).buildClient(); .

4. Я обновил код в вопросе. Он в основном такой же, как тот, который вы скопировали в своем ответе.

Ответ №2:

Я столкнулся с той же проблемой в clojure, которая также использует библиотеку Java Azure. В моем случае были некоторые другие библиотеки, которые мы использовали, которые имели зависимость от jackson fasterxml. azure-storage-blob также использует ту же зависимость с другой версией.

Для нас среди тех, кто добавил более высокую версию jason fasterxml dependency в dependencies, наша проблема была решена.

Сначала вы можете найти все дерево зависимостей, затем, анализируя дерево, вы можете найти наиболее обновленную версию jason fasterxml.

Приведенные ниже зависимости работали для нас

                  [com.azure/azure-storage-blob "12.14.3"]
                 [com.fasterxml.jackson.core/jackson-databind "2.13.1"]
                 [com.fasterxml.jackson.core/jackson-core "2.13.1"]]

 

Вы можете найти более подробную информацию здесь