1. 概述
在本教程中,我们将学习和比较用于调试Quarkus应用程序的不同选项。它们都有一个共同点:我们需要一个调试客户端(通常是IDE),该客户端连接到正在运行的JVM,并允许我们设置断点并读取堆栈跟踪和变量。但是,启动应用程序(JVM)的选项有所不同。
2. 调试Java应用程序
Quarkus是基于Java的,因此我们可以使用常见方法来调试Java应用程序。我们可以在IDE中运行main方法,IDE的调试器直接连接到已启动的JVM。或者我们可以构建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 Dev模式
调试Quarkus应用程序的最佳方法是以开发模式启动它,这不仅会以调试模式启动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连接到JVM。
3.2 从IDE启动
IDE可以帮助我们一步启动Quarkus应用程序并连接调试器,安装Quarkus插件(Quarkus、Quarkus Run Configs和Quarkus Tools)后,IntelliJ具有专门针对Quarkus的运行配置。
如果没有,Quarkus允许我们创建一个自定义的main方法,我们可以从调试模式下的任何Java IDE直接运行该方法:
@QuarkusMain
public class MyQuarkusApplication {
public static void main(String[] args) {
Quarkus.run(args);
}
}
3.3 Quarkus远程开发
我们还可以在容器或Kubernetes环境(如OpenShift)中部署和运行Quarkus应用程序。为此,我们需要将openshift扩展添加到我们的应用程序中,例如使用Maven:
# Maven
mvn quarkus:add-extension -Dextensions="io.quarkus:quarkus-openshift"
# Quarkus CLI
quarkus ext add io.quarkus:quarkus-openshift
然后,我们可以使用以下命令在OpenShift集群中创建一个项目,并将应用程序作为所谓的Mutable JAR部署到OpenShift:
# login to OpenShift
oc login ...
# create a project (connect to a project)
oc new-project quarkus-remote
# deploy the application to the OpenShift project, incl. a Route
mvn clean package -DskipTests \
-Dquarkus.kubernetes.deploy=true \
-Dquarkus.package.jar.type=mutable-jar \
-Dquarkus.live-reload.password=changeit \
-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
# with the Quarkus CLI, use "quarkus build -D..."
这也会激活实时编码,然后我们可以在OpenShift项目中找到一个具有单个pod、一个服务和一个路由的部署:
对于具有实时重加载和调试的远程开发,我们路由并运行以下命令:
# Maven
mvn quarkus:remote-dev \
-Dquarkus.package.jar.type=mutable-jar \
-Dquarkus.live-reload.password=changeit \
-Dquarkus.live-reload.url=http://YOUR_APP_ROUTE_URL
# with the Quarkus CLI, use "quarkus "
然后,我们按照前面描述的相同方式使用IDE连接到JVM。
4. 总结
在本文中,我们了解了在本地和远程机器上以调试模式运行Quarkus应用程序的可能性,在容器中开发和调试可能有助于解决环境问题。
Post Directory
