!!!参考
https://www.zu-min.com/archives/1255
!!ChatGPT
+ vscode でservletの簡単なプログラムを作ってtomcatでリモートデバッグする流れを順番に教えて
+ この手順のデプロイを簡単にする方法を教えて
+ tomcat7-maven-pluginを使って簡単にするデプロイできませんか?
!!!方法1
!!概要
tomcatを別に立てて、tomcatのmangerにpackageを送り込んでデプロイする方法。
!!環境構築手順
+ mavenを使ったservletのサンプルを作成する
+ tomcatのmanagerを設定する
++ cp -r /usr/local/tomcat/webapps.dist/manager /usr/local/tomcat/webapps/manager
++ tomcat-users.xml 編集
+++
+++
+++
++ webapps/manager/META-INF/context.xml 編集
+++ IP 制限を外す(dockerを使ってホストから接続するなどの場合)
+++ をコメントアウト
+ pom.xml編集
++ tomcat7-maven-plugin の設定
+++ http://tomcat:8080/manager/text
+++ admin
+++ password
+++ /app-path
+++ は tomcatのコンテキスト(アプリのURLパス)を指定できる
+ tomcatのJPDAを有効にする
++ tomcat の起動オプションを修正
+++ catalina.sh jpda run
++ JPDAの待受ホスト、ポートの設定(0.0.0.0にして他コンテナからのアクセスを可能にする)
+++ 環境変数に以下を設定
+++ JPDA_ADDRESS=0.0.0.0:8000
+ VSCodeのデバッグ実行でtomcatのmanagerへのデプロイとリモートデバッグへの接続
++ launch.json
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Debug",
"request": "attach",
"hostName": "tomcat",
"port": 8000,
"preLaunchTask": "deploy"
}
]
}
++ tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "deploy",
"type": "shell",
"command": "mvn -B tomcat7:redeploy -f \"${workspaceFolder}/pom.xml\"",
"group": "build"
}
]
}
!!一式
上記の環境をdevcontainerとdockerで作成した環境
{{ref servlet_debug_on_vscode.zip}}
make build
make up
で http://localhost:8080/app-path/hello にアプリがデプロイされ、ブレークポイント等が使えるようになる。
!!!方法2
!!概要
上記の方法1とほぼ同じだが、VSCodeの保存時の自動コンパイルの出力結果(target/classes)などを直接指定することで自動デプロイを実現する。
!!設定
!docker-compose.yml
上記のdocker-compose.ymlのtomcatのvolumesに以下を追加
- ./servlet/src/main/webapp:/usr/local/tomcat/webapps/app-path
- ./servlet/target/classes:/usr/local/tomcat/webapps/app-path/WEB-INF/classes
- ./servlet/target/hello-servlet/WEB-INF/lib:/usr/local/tomcat/webapps/app-path/WEB-INF/lib
tomcatのアプリにtarget/classesなどを直接マウントする。
!!一式
{{ref servlet_debug_on_vscode_auto_reload.zip}}
!!!方法3
!!概要
上記の方法2とほぼ同じだが、VSCodeの保存時の自動コンパイルの出力結果(target/classes)などを、VSCodeでデバック実行をしたときにtomcatにデプロイする。
自動デプロイしないので、保存するたびにデプロイが実施されない。
!!設定
!docker-compose.yml
上記のdocker-compose.ymlのtomcatのvolumesに以下を追加
- ./servlet/src/main/webapp:/usr/local/tomcat/webapps/app-path
- ./servlet/target/hello-servlet/WEB-INF/classes:/usr/local/tomcat/webapps/app-path/WEB-INF/classes
- ./servlet/target/hello-servlet/WEB-INF/lib:/usr/local/tomcat/webapps/app-path/WEB-INF/lib
!.vscode/launch.json
{
// IntelliSense を使用して利用可能な属性を学べます。
// 既存の属性の説明をホバーして表示します。
// 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Debug Reload",
"request": "attach",
"hostName": "tomcat",
"port": 8000,
"preLaunchTask": "reload"
}
]
}
!.vscode/tasks.json
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "reload",
"type": "shell",
"command": "\\cp -rT \"${workspaceFolder}/target/classes\" \"${workspaceFolder}/target/hello-servlet/WEB-INF/classes\" && curl --user admin:password http://tomcat:8080/manager/text/reload?path=/app-path",
"group": "build"
}
]
}
!!一式
{{ref servlet_debug_on_vscode_reload.zip}}
{{category2 プログラミング言語,Servlet & Struts}}
{{category2 ツール,vscode}}