参考
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 編集
- <role rolename="manager-gui"/>
- <role rolename="manager-script"/>
- <user username="admin" password="password" roles="manager-gui,manager-script" />
- webapps/manager/META-INF/context.xml 編集
- IP 制限を外す(dockerを使ってホストから接続するなどの場合)
- <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> をコメントアウト
- pom.xml編集
- tomcat7-maven-plugin の設定
- <url>http://tomcat:8080/manager/text</url>
- <username>admin</username>
- <password>password</password>
- <path>/app-path</path>
- <path>は tomcatのコンテキスト(アプリのURLパス)を指定できる
- tomcat7-maven-plugin の設定
- tomcatのJPDAを有効にする
- tomcat の起動オプションを修正
- catalina.sh jpda run
- JPDAの待受ホスト、ポートの設定(0.0.0.0にして他コンテナからのアクセスを可能にする)
- 環境変数に以下を設定
- JPDA_ADDRESS=0.0.0.0:8000
- tomcat の起動オプションを修正
- 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で作成した環境
servlet_debug_on_vscode.zip(113)
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などを直接マウントする。
一式
servlet_debug_on_vscode_auto_reload.zip(131)
方法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" } ] }
一式
servlet_debug_on_vscode_reload.zip(69)
[カテゴリ: ツール > vscode]
[通知用URL]
Tweet
最終更新時間:2024年04月17日 12時56分40秒