Jackson Schema校验抛出IllegalAccessError,是否因依赖冲突导致?
问题结论:是依赖冲突导致的
这个错误是Jackson版本不兼容引发的依赖冲突问题,具体原因和解决步骤如下:
错误原因分析
java.lang.IllegalAccessError表明JsonFactoryBuilder类尝试访问JsonFactory.DEFAULT_ROOT_VALUE_SEPARATOR字段时没有权限。核心诱因是:
- Jackson不同版本中,该字段的访问修饰符发生过变更(比如从
public改为private); - 项目中同时存在多个版本的Jackson核心类(
jackson-core),导致类加载时版本不一致:JsonFactoryBuilder来自某个版本的Jackson,而JsonFactory来自另一个不兼容的版本,触发了访问权限错误。
你的依赖树仅显示了jackson-datatype-jsr310:2.15.0-rc2,但Jackson核心包(jackson-core、jackson-databind等)大概率被swagger相关依赖引入了其他版本,引发了冲突。
解决步骤
- 执行以下命令,精准排查所有Jackson核心相关依赖的版本:
mvn dependency:tree -Dincludes=com.fasterxml.jackson.core - 在项目
pom.xml中统一所有Jackson模块的版本,确保jackson-core、jackson-databind、jackson-annotations、jackson-datatype-jsr310等组件使用同一个稳定版本(建议避免使用rc候选版本,比如替换为2.15.2)。 - 如果发现某个依赖引入了不兼容的Jackson版本,通过
<exclusions>排除该依赖中的Jackson模块,示例如下:<dependency> <groupId>xxx</groupId> <artifactId>xxx</artifactId> <version>xxx</version> <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> </exclusions> </dependency>
内容的提问来源于stack exchange,提问作者Kishan Yarlagadda
相关产品推荐
相关产品推荐

