1. 概述

本文将介绍并对比调试Quarkus应用的多种方案。这些方案的核心机制相同:都需要调试客户端(通常是IDE)连接到运行中的JVM,通过设置断点、查看堆栈跟踪和变量进行调试。但启动应用(JVM)的方式存在差异。

2. 调试Java应用

Quarkus基于Java,因此可采用标准Java调试方案。常见方式包括:

  • 直接在IDE中运行main方法,IDE调试器自动连接
  • 构建JAR包后通过命令行启动(示例使用Maven构建):
java \
  -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 \
  -jar target/quarkus-app/quarkus-run.jar

⚠️ 若使用Docker/podman运行容器,需将5005端口映射到宿主机

应用启动后,IDE通过5005端口连接调试(IntelliJ操作路径:Run > Edit Configurations > Remote JVM Debug)。

3. Quarkus开发模式

调试Quarkus应用的最佳实践是启动开发模式(Dev Mode)。该模式不仅开启JVM调试(监听5005端口),还自动激活:

  • Dev UI
  • Dev Services
  • 热重载(Live Reload)
  • 持续测试(Continuous Testing)

完整特性参考Quarkus官方文档

3.1 命令行启动

通过以下命令启动开发模式:

# Maven
mvn quarkus:dev
# Quarkus CLI
quarkus dev

可添加可选参数:

  • -Ddebug=<port> 自定义调试端口(默认5005)
  • -Dsuspend 暂停应用执行,等待调试器连接

✅ IDE连接方式与第2节相同

3.2 IDE启动

现代IDE支持一键启动Quarkus应用并自动连接调试器。IntelliJ安装以下插件后可获得专用配置:

Quarkus运行配置示例

若未安装插件,可通过自定义main方法实现调试启动:

@QuarkusMain
public class MyQuarkusApplication {
    public static void main(String[] args) {
        Quarkus.run(args);
    }
}

3.3 远程开发模式

可将Quarkus应用部署到容器或Kubernetes环境(如OpenShift)进行远程调试。操作步骤:

  1. 添加OpenShift扩展:

    # Maven
    mvn quarkus:add-extension -Dextensions="io.quarkus:quarkus-openshift"
    # Quarkus CLI
    quarkus ext add io.quarkus:quarkus-openshift
    
  2. 部署到OpenShift(启用热重载): ```bash

    登录OpenShift

    oc login https://api.openshift.example.com:6443 --token=xxxxx

    创建项目

    oc new-project quarkus-remote

    部署应用(Mutable JAR格式)

    mvn clean package -DskipTests \

-Dquarkus.kubernetes.deploy=true
-Dquarkus.package.jar.type=mutable-jar
-Dquarkus.live-reload.password=dev12345
-Dquarkus.container-image.build=true
-Dquarkus.kubernetes-client.trust-certs=true
-Dquarkus.kubernetes.deployment-target=openshift
-Dquarkus.openshift.route.expose=true
-Dquarkus.openshift.env.vars.quarkus-launch-devmode=true
-Dquarkus.openshift.env.vars.java-enable-debug=true

Quarkus CLI等效命令:quarkus build -D...


部署后可在OpenShift项目中查看资源:
![OpenShift部署资源](/wp-content/uploads/2024/11/Bildschirmfoto-2024-11-08-um-21.58.30.png)

3. 启动远程调试:
```bash
# Maven
mvn quarkus:remote-dev \
  -Dquarkus.package.jar.type=mutable-jar \
  -Dquarkus.live-reload.password=dev12345 \
  -Dquarkus.live-reload.url=http://quarkus-remote-quarkus.apps.openshift.example.com
# Quarkus CLI等效命令:quarkus remote-dev -D...

✅ IDE连接方式与第2节相同

4. 总结

本文介绍了Quarkus应用的本地和远程调试方案。容器化调试特别适合排查环境差异问题,简单粗暴但有效。建议优先使用开发模式(Dev Mode),它集成了调试、热重载等开发利器,能显著提升开发效率。


原始标题:Debugging Quarkus Applications | Baeldung