You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ANTLR版本不匹配致ATN反序列化失败问题排查与解决

ANTLR版本冲突(4.9.3 vs 4.10.1)导致Could not deserialize ATN异常的原因与解决办法

问题原因

  • 依赖传递的隐式覆盖:Spark SQL 3.5.0的POM虽声明使用ANTLR 4.9.3,但Spark的其他子模块或间接依赖(如第三方组件)可能引入了antlr4-runtime:4.10.1,Maven的依赖调解机制会选择路径更近或声明顺序更优的版本,最终导致运行时使用高版本ANTLR运行库,而Spark SQL编译时用4.9.3工具生成的代码与运行库版本不匹配,引发ATN反序列化异常。
  • Quarkus BOM的版本统一干预:Quarkus的物料清单(BOM)会统一管理大量依赖版本,若Quarkus BOM中指定antlr4-runtime为4.10.1,会强制覆盖Spark SQL声明的版本,造成冲突。

解决办法

1. 锁定ANTLR运行时版本为4.9.3

在项目pom.xml中通过<dependencyManagement>强制锁定版本,确保所有依赖使用Spark SQL预期的4.9.3:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.antlr</groupId>
            <artifactId>antlr4-runtime</artifactId>
            <version>4.9.3</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

再在<dependencies>块中显式引入该依赖,强化优先级:

<dependencies>
    <!-- 其他业务依赖 -->
    <dependency>
        <groupId>org.antlr</groupId>
        <artifactId>antlr4-runtime</artifactId>
        <version>4.9.3</version>
    </dependency>
</dependencies>

2. 排除冲突的ANTLR依赖

通过IntelliJ依赖分析工具定位到引入antlr4-runtime:4.10.1的根源依赖,在对应依赖声明中排除冲突:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.13</artifactId>
    <version>3.5.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.antlr</groupId>
            <artifactId>antlr4-runtime</artifactId>
        </exclusion>
    </exclusions>
</dependency>

排除后手动引入4.9.3版本的antlr4-runtime即可。

3. 覆盖Quarkus BOM的ANTLR版本

若Quarkus BOM是版本冲突源头,在<dependencyManagement>中覆盖版本(优先级高于Quarkus BOM声明):

<dependencyManagement>
    <!-- 先引入Quarkus BOM -->
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-bom</artifactId>
        <version>3.2.10.Final</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    <!-- 覆盖ANTLR版本 -->
    <dependency>
        <groupId>org.antlr</groupId>
        <artifactId>antlr4-runtime</artifactId>
        <version>4.9.3</version>
    </dependency>
</dependencyManagement>

验证操作

修改完成后执行以下命令,确认依赖版本统一为4.9.3:

mvn dependency:tree | grep antlr4-runtime

确认版本无误后重新运行应用即可解决异常。

内容的提问来源于stack exchange,提问作者PowerfullDeveloper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 02:10:17