調試 Quarkus 應用程式
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 Run > Edit Configurations > Remote JVM Debug
3.Quarkus開發模式
調試 Quarkus 應用程式的最佳方法是以開發模式啟動它。這不僅以偵錯模式啟動 JVM,偵聽連接埠 5005,還啟動 Dev UI、 Dev Services 、Live Reload 和Continuous Test等功能。我們可以在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 應用程式的可能性。在容器中進行開發和調試可能有助於解決環境問題。