VSCode调试Tomcat应用(不用Tomcat插件)

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

<Context path="/sample" reloadable="true"
docBase="D:/sample/sample-web/target/sample-web-1.0.0"
workDir="工作目录">
</Context>

 

设置完以上的内容后,就可以debug启动tomcat,并且在修改web资源的时候自动更新了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章