Quarkus开发模式启动抛出EXCEPTION_ACCESS_VIOLATION错误求助
问题概述
执行quarkus dev时JVM抛出EXCEPTION_ACCESS_VIOLATION崩溃,栈信息显示错误发生在jansi.dll调用过程中,根源是Jansi库初始化Quarkus控制台终端时出现空指针访问。当前环境:Quarkus 3.0.3.Final、Gradle、Java 17(Oracle JDK 17.0.6+9)、Windows 10。
核心错误日志片段:
# A fatal error has been detected by the Java Runtime Environment: # EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00007ffd05962778, pid=20072, tid=13304 ... Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) V [jvm.dll+0x3d2778] C [jansi.dll+0x104e] Java frames: j org.fusesource.jansi.internal.CLibrary.init()V+0 j org.fusesource.jansi.internal.CLibrary.<clinit>()V+12 ... j io.quarkus.deployment.console.ConsoleHelper.installConsole(...)V+95
排查方向
禁用Quarkus控制台ANSI支持
在启动命令中添加参数:-Dquarkus.console.disable=true,或在application.properties中配置:quarkus.console.disable=true,跳过终端ANSI初始化流程。强制更新Jansi依赖版本
在Gradle构建脚本中添加版本约束,使用更稳定的Jansi版本:dependencies { constraints { implementation 'org.fusesource.jansi:jansi:2.4.0' } }执行
gradle clean build --refresh-dependencies刷新依赖缓存。切换Java运行时
替换Oracle JDK为Adoptium OpenJDK 17.0.7或更高小版本,避免Oracle JDK特定的native库兼容问题。以非交互式模式启动
执行quarkus dev --no-interactive,跳过交互式终端的初始化步骤,验证是否能正常启动应用。清理并重建项目
删除项目下的build目录,同时清理Gradle缓存中Jansi相关文件(路径:C:\Users\XY\.gradle\caches\modules-2\files-2.1\org.fusesource.jansi),然后重新执行quarkus dev。更换终端环境
使用Windows Terminal替代默认的命令提示符或PowerShell启动quarkus dev,避免旧终端的兼容性问题;同时确保Windows系统更新到最新版本(当前为19041,建议更新至22H2或更高)。
内容的提问来源于stack exchange,提问作者Ayume

