Java项目引入Azure Storage SDK遇Jackson版本依赖冲突问题
问题原因分析
你遇到的Jackson版本冲突本质是依赖版本优先级导致的混合版本运行:
- 你引入的
azure-sdk-bom:1.2.14本身内置管理的Jackson核心模块(core、databind、jsr310)版本为2.12.6,Maven的依赖解析逻辑中,BOM声明的版本优先级高于你单独声明的依赖版本,所以即使你显式用了2.15.2,运行时还是会加载BOM指定的2.12.6版本。 - 你的项目中
jackson-dataformat-xml是2.15.2版本,这个版本依赖的Jackson核心方法(比如IOContext.contentReference())在2.12.6中不存在,导致调用时抛出NoSuchMethodError。
解决方案
方案1:显式在DependencyManagement中锁定Jackson版本(推荐)
在dependencyManagement中直接声明所有Jackson核心模块的2.15.2版本,覆盖Azure BOM中的旧版本,确保所有依赖统一使用同一版本:
<dependencyManagement> <dependencies> <!-- 保留Azure SDK BOM引入 --> <dependency> <groupId>com.azure</groupId> <artifactId>azure-sdk-bom</artifactId> <version>1.2.14</version> <type>pom</type> <scope>import</scope> </dependency> <!-- 显式指定Jackson所有核心模块版本,覆盖BOM --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.15.2</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> <version>2.15.2</version> </dependency> </dependencies> </dependencyManagement>
方案2:升级Azure SDK BOM到兼容Jackson 2.15.x的版本
azure-sdk-bom:1.2.14是较旧的版本,后续的BOM版本已经跟进了Jackson的新版本。升级到最新稳定版(比如1.14.0),其内置的Jackson版本会与你使用的2.15.2匹配,自动消除冲突:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-sdk-bom</artifactId> <version>1.14.0</version> <type>pom</type> <scope>import</scope> </dependency>
方案3:排除Azure依赖中的旧版本Jackson(不推荐)
在azure-storage-blob依赖中排除传递引入的旧版本Jackson模块,但这种方式需要逐个排查所有可能引入旧版本的依赖,容易遗漏:
<dependency> <groupId>com.azure</groupId> <artifactId>azure-storage-blob</artifactId> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jsr310</artifactId> </exclusion> </exclusions> </dependency>
验证方法
修改配置后,执行mvn dependency:tree命令,检查输出中所有Jackson相关模块的版本是否统一为2.15.2,确认无2.12.6版本残留即可。
内容的提问来源于stack exchange,提问作者Piotr Kwiatkowski
相关产品推荐
相关产品推荐

