为何Jackson依赖版本被替换为父项目的1.1.5-SNAPSHOT?
以下是几种可能的原因及验证方式:
父项目依赖管理强制指定错误版本
你的microservices或alpha父项目的<dependencyManagement>节点中,可能对Jackson核心包(如jackson-databind、jackson-core、jackson-annotations等)做了版本声明,且错误地将版本值设为了父项目的1.1.5-SNAPSHOT。由于Maven中dependencyManagement的优先级高于传递依赖,即使azure-storage-blob引入了2.13版本,最终也会被强制替换成父项目指定的错误版本。
验证方式:执行mvn dependency:tree -Dverbose,查看Jackson相关包的版本来源,输出中会明确显示该版本是从哪个父项目的dependencyManagement继承而来。Maven属性错误覆盖Jackson版本
父项目的<properties>节点里可能定义了Jackson相关的版本属性(比如jackson.version、com.fasterxml.jackson.version),且属性值被误设为1.1.5-SNAPSHOT。如果azure-storage-blob或其他依赖引用了这个属性来指定Jackson版本,就会导致版本被错误替换。
验证方式:检查microservices和alpha父项目的pom.xml,查找是否存在和Jackson版本相关的属性定义。Docker构建环节的依赖异常
你的Dockerfile构建命令可能存在问题:比如使用了错误的Maven Profile,导致打包时引入了错误的依赖版本;或者构建过程中执行了自定义脚本,意外修改了依赖包的版本。另外,也可能是容器构建时使用的本地Maven仓库缓存了错误版本的Jackson包。
验证方式:在本地执行mvn clean package,解压生成的jar包(如果是Spring Boot项目,查看BOOT-INF/lib目录),确认Jackson包版本是否为2.13。如果本地版本正确,说明问题出在Docker构建环节。传递依赖版本仲裁异常
虽然mvn dependency:tree显示Jackson版本为2.13,但可能存在其他间接依赖引入了更低版本的Jackson,而Maven的版本仲裁规则(路径最近优先、同路径则声明在先)出现异常,或者父项目的依赖管理强制了错误版本。
验证方式:执行mvn dependency:tree -Dverbose,查看是否有其他依赖引入了Jackson的其他版本,以及该版本是否被父项目的依赖管理覆盖。
解决建议
- 优先检查父项目的
<dependencyManagement>,修正Jackson相关包的版本声明为正确值(比如2.13.x)。 - 检查父项目的properties节点,删除或修正错误的Jackson版本属性。
- 本地打包验证依赖版本,排除Docker构建环节的问题,必要时在Dockerfile中添加
mvn clean install -U强制更新依赖。 - 如果是版本冲突问题,可在delivery-record-importer或core项目的
<dependencyManagement>中显式指定Jackson的正确版本,强制覆盖所有传递依赖的版本。
内容的提问来源于stack exchange,提问作者Enzo Nakamura

