VSCode中的tomcat插件有2种调试方式,一种是直接调试war包,另一种是把项目中的某个目录作为docBase.
第一种方式,对于开发人员调试的时候修改JSP,JS,效率比较低,要通过:打包->重启tomcat的方式进行更新.
第二种方式,tomcat插件是直接把项目中的目录名作为ContextPath,这很可能不符合开发要求(比如是maven工程的时候,那个目录名称后面会带上-X.Y.Z版本号).
所以自己定制了一套调试Tomcat应用的方法:
Windows 10
VSCode:1.45.1
Debug for Java:0.26.0
Maven for Java:0.21.4
Language Support for Java(TM) by Red Hat:0.62.0
Trigger Task on Save:0.2.16
launch.json:
{
"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Debug (Launch)",
"request": "launch",
"mainClass": "org.apache.catalina.startup.Bootstrap",
"args": "start",
"projectName": "Maven主工程名称,如果是Maven父子结构,则为Web工程的名字",
"classPaths": [
"Tomcat根目录\\bin\\tomcat-juli.jar",
"Tomcat根目录\\bin\\bootstrap.jar"
],
"vmArgs": "-Djava.util.logging.config.file=\"Tomcat根目录\\conf\\logging.properties\" -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Djava.io.tmpdir=\"Tomcat根目录\\temp\" -Dcatalina.base=\"Tomcat根目录\" -Dcatalina.home=\"Tomcat根目录\""
}
]
}
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "compile",
"type": "shell",
"command": "mvn -B clean package",
"group": "build",
"problemMatcher": []
},
{
"label": "updateResource",
"type": "shell",
"isBackground": true,
"command": ".vscode/updateResource.bat ${relativeFile}",
"group": "build",
"problemMatcher": []
}
]
}
settings.json
含有web资源的主工程相对目录说明:
假如maven的web项目结构如下:
则含有web资源的主工程相对目录是
sample-web/src/main/resources/webapp
{
......
......
"triggerTaskOnSave.tasks":{
"build": [
"含有web资源的主工程相对目录/**/*.*"
]
},
"triggerTaskOnSave.on": true,
"triggerTaskOnSave.selectedTask": "updateResource"
}
updateResource.bat
@echo off
cd %~dp0..
echo '%1'|find "含有web资源的主工程相对目录" >null || (echo "[%1] is not a resouce file!" && exit 1)
set OBJFILE=%1
::下面的语句是把修改文件的相对目录替换到tomcat运行容器的docBase目录的相应位置
::如原来修改的文件是sample-web/src/main/resources/webapps/WEB-INF/views/common/login.jsp
::需要覆盖到sample-web/target/sample-web-1.0.1/WEB-INF/views/common/login.jsp
::则下面的语句就变成
::copy "%1" "%OBJFILE:sample-web/src/main/resources/webapps=sample-web/target/sample-web-1.0.1%"
::实际运行的语句是
::copy "sample-web/src/main/resources/webapps/WEB-INF/views/common/login.jsp" "sample-web/target/sample-web-1.0.1/WEB-INF/views/common/login.jsp"
copy "%1" "%OBJFILE:含有web资源的主工程相对目录=含有web资源的主工程名称\target\docBase目录%"
exit 0
在Tomcat根目录下的conf\Catalina\localhost目录中:
添加如下文件
sample.xml
设置完以上的内容后,就可以debug启动tomcat,并且在修改web资源的时候自动更新了