What's?
Nablarch 6では、ローカルでWebアプリケーションを動かす用途としてJetty 12を使用しています。
具体的にはJetty Maven Pluginを使い、jetty:run
で起動します。
Nablarch 5まではWAITTを使用していましたが、その切り替え方法はこちらです。
Nablarch 5から6への移行ガイド / 移行手順の詳細 / Jakarta EE対応 / waitt-maven-pluginをjetty-ee10-maven-pluginに変更する
今回はJetty Maven Pluginで起動したNablarchのWebアプリケーションのデバッグ方法をメモしておきます。
mvnDebug
Apache MavenにはmvnDebug
というコマンドが付属しています。
実体としてはこちらで、環境変数MAVEN_OPTS
に-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
を追加したものです。
MAVEN_DEBUG_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=${MAVEN_DEBUG_ADDRESS:-8000}"
echo Preparing to execute Maven in debug mode
env MAVEN_OPTS="$MAVEN_OPTS" MAVEN_DEBUG_OPTS="$MAVEN_DEBUG_OPTS" "`dirname "$0"`/mvn" "$@"
このコマンド経由でjetty:run
を起動することで、プロセスにアタッチしてデバッグすることができます。
なので、実際にはNablarch固有の方法ではなくこの手のMavenプラグインのデバッグにも応用できる話ではあります。
Jetty Maven Plugin
Jetty Maven Pluginのデフォルトのデプロイメントモード(deployMode
)はEMBED
です。
Using the Jetty Maven Plugin / Deployment Modes
このため、mvnDebug
で有効にしたMAVEN_OPTS
の内容がそのまま作用します。
deployMode
をFORK
にした場合はjvmArgs
での設定になると思います。
環境
今回の環境はこちらです。
$ java --version
openjdk 17.0.12 2024-07-16
OpenJDK Runtime Environment (build 17.0.12+7-Ubuntu-1ubuntu222.04)
OpenJDK 64-Bit Server VM (build 17.0.12+7-Ubuntu-1ubuntu222.04, mixed mode, sharing)
$ mvn --version
Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
Maven home: /home/charon/.sdkman/candidates/maven/3.9.9
Java version: 17.0.12, vendor: Ubuntu, runtime: /usr/lib/jvm/java-17-openjdk-amd64
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-124-generic", arch: "amd64", family: "unix"
また、デバッグにはIntelliJ IDEA Community Editionを使用します。
Nablarchのブランクプロジェクトを作成する
確認用のブランクプロジェクト作成します。
今回は、RESTfulウェブサービスを使うことにします。
ブランクプロジェクトの作成。
$ mvn archetype:generate \
-DinteractiveMode=false \
-DarchetypeGroupId=com.nablarch.archetype \
-DarchetypeArtifactId=nablarch-jaxrs-archetype \
-DarchetypeVersion=6u2 \
-DgroupId=com.example \
-DartifactId=hello-nablarch-jaxrs \
-Dversion=0.0.1 \
-Dpackage=com.example
プロジェクト内に移動。
$ cd hello-nablarch-jaxrs
まずは通常どおりJettyを起動して動作確認。
$ mvn jetty:run
$ curl localhost:9080/find/json
[{"userId":1,"kanjiName":"名部楽太郎","kanaName":"なぶらくたろう"},{"userId":2,"kanjiName":"名部楽次郎","kanaName":"なぶらくじろう"}]
mvnDebugを使ってデバッグする
では、今度はmvnDebug
でjetty:run
を起動します。
$ mvnDebug jetty:run
起動するとアタッチ待ちになるので
Preparing to execute Maven in debug mode
Listening for transport dt_socket at address: 8000
プロセスにアタッチします。
対象はポート番号が表示されているものなりますね。
アタッチすると停止していたMavenプロセスが動き出すので、あとはブレークポイントをつけるなりしてデバッグします。
Mavenがアタッチ待ちになるのが嫌だという場合は、suspend
をn
にしてあとからアタッチすればよいでしょう。
$ MAVEN_OPTS='-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000' mvn jetty:run