无法在Eclipse中调试Quarkus应用:quarkus-application.dat缺失问题
问题描述
使用Quarkus 3.9.5开发RESTful应用,无论使用异步依赖(如Mutiny)还是同步模式,在Eclipse连接调试端口时都会触发异常:Quarkus尝试读取Maven仓库路径下的<M2_REPO>/repository/io/quarkus/quarkus/quarkus-application.dat文件,找不到该文件则抛出文件未找到异常,直接终止调试会话。经调试Quarkus代码确认问题出在Quarkus端,与Eclipse无关。
POM依赖片段
<properties> <!-- ... --> <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id> <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id> <quarkus.platform.version>3.9.5</quarkus.platform.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>${quarkus.platform.group-id}</groupId> <artifactId>${quarkus.platform.artifact-id}</artifactId> <version>${quarkus.platform.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-arc</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-container-image-docker</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-mutiny</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-rest</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-rest-client</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-rest-client-jackson</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-rest-jackson</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-smallrye-health</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>io.smallrye.reactive</groupId> <artifactId>mutiny</artifactId> </dependency> <!-- ... --> </dependencies>
已尝试的操作
- 删除
<M2_REPO>/repository/io目录,执行mvn clean install -U重新拉取并安装依赖 - 创建空的
quarkus-application.dat文件,但因内容格式不符合要求仍报错 - 全局搜索主目录,未找到该文件的任何实例
异常触发位置:quarkus-bootstrap-runner包的QuarkusEntryPoint.java类
解决方案
1. 执行完整Quarkus构建生成元数据文件
quarkus-application.dat是Quarkus构建过程中生成的应用元数据文件,正常情况下会在构建产物中存在。执行完整构建命令:
mvn clean package -Dquarkus.package.type=uber-jar
根据你的打包需求调整quarkus.package.type参数(如fast-jar)。构建完成后检查target/quarkus-app目录,确认quarkus-application.dat已生成,调试时确保Quarkus指向该构建目录。
2. 添加调试JVM参数跳过仓库查找
在Eclipse的调试启动配置中添加以下JVM参数,强制Quarkus使用本地构建的元数据:
-Dquarkus.bootstrap.runner.mode=dev
该参数会让Quarkus以开发模式运行,优先读取本地构建资源,避免去Maven仓库查找dat文件。
3. 升级Quarkus版本
此问题可能是Quarkus 3.9.5的已知bug,尝试升级到最新稳定版本(如3.10.x系列):
<!-- 修改POM中的版本号 --> <quarkus.platform.version>3.10.2</quarkus.platform.version>
执行mvn clean install -U更新依赖后重新调试。
4. 手动触发Quarkus元数据构建
执行Quarkus专属构建命令,专门生成应用元数据文件:
mvn quarkus:build
该命令会处理元数据生成逻辑,并将quarkus-application.dat放置到正确路径。
内容的提问来源于stack exchange,提问作者user3194513

