!!!参考 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}}