升级Azure SDK for Java至12.21.1时遇ContextView类缺失错误求助
问题描述
我正将Azure SDK for Java升级至12.21.1版本,当前使用的Spring Boot版本为2.1.6,通过Gradle引入依赖:
implementation 'com.azure:azure-storage-blob:12.21.1'
使用以下代码创建BlobServiceClient:
String accountUrl = "https://" + accountName + ".blob.core.windows.net"; StorageSharedKeyCredential sharedKeyCredential = new StorageSharedKeyCredential(accountName, accountKey); try{ BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().credential(sharedKeyCredential).endpoint(accountUrl).buildClient(); }
但运行时抛出如下错误:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: reactor/util/context/ContextView] with root cause java.lang.ClassNotFoundException: reactor.util.context.ContextView at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) ~[na:na] BuiltinClassLoader.java:581 at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) ~[na:na] ClassLoaders.java:178 at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522) ~[na:na] ClassLoader.java:522 at com.azure.core.http.policy.HttpPolicyProviders.addAfterRetryPolicies(HttpPolicyProviders.java:52) ~[azure-core-1.37.0.jar:1.37.0] HttpPolicyProviders.java:52 at com.azure.storage.blob.implementation.util.BuilderHelper.buildPipeline(BuilderHelper.java:128) ~[azure-storage-blob-12.21.1.jar:12.21.1] BuilderHelper.java:128 at com.azure.storage.blob.BlobServiceClientBuilder.buildAsyncClient(BlobServiceClientBuilder.java:135) ~[azure-storage-blob-12.21.1.jar:12.21.1] BlobServiceClientBuilder.java:135 at com.azure.storage.blob.BlobServiceClientBuilder.buildClient(BlobServiceClientBuilder.java:114) ~[azure-storage-blob-12.21.1.jar:12.21.1]
解决方案
这个错误是因为Spring Boot 2.1.6依赖的Reactor版本过低,Azure SDK 12.21.1依赖的azure-core 1.37.0需要Reactor 3.3.0及以上版本(ContextView类是Reactor 3.3.0之后才新增的)。
有两种可行的解决方式:
方式一:升级Spring Boot版本
Spring Boot 2.1.x默认依赖的Reactor版本为3.2.x,不满足Azure SDK的要求。优先建议将Spring Boot升级到2.3.x及以上的稳定版本(比如2.7.x长期支持版),升级后会自动引入符合要求的Reactor依赖,彻底解决版本冲突问题。
方式二:手动指定Reactor依赖版本
如果暂时无法升级Spring Boot,可以在Gradle配置中手动指定更高版本的Reactor依赖,覆盖Spring Boot的默认版本:
dependencies { // 保留原有依赖 implementation 'com.azure:azure-storage-blob:12.21.1' // 手动指定符合要求的Reactor版本 implementation 'io.projectreactor:reactor-core:3.4.30' }
注意:手动指定版本可能引发其他潜在的依赖冲突风险,因此优先推荐第一种方式。
内容的提问来源于stack exchange,提问作者Yatharth Mishra
相关产品推荐
相关产品推荐

