自从用过vscode,再也无法忍受eclipse的龟速和庞大的资源占用。但是新入手vsc,还是遇到了诸多困难。
比如热部署。
vsc一切都是基于插件的,所以很强大,但也正因为如此,热部署之类的功能并非开箱即用的。上网搜索了一番,仍然没有找到可用的方案。
要知道,对于java web项目来说,每修改一个文件就需要重新启动tomcat那是何等的痛苦。
略。
这个倒是简单,安装tomcat for java这个插件,然后配置插件指向tomcat目录即可搞定(linux系统注意tomcat目录的权限)。
使用方法:
这时候就发现问题了,难道我每修改一行代码都需要package,然后在debug/run on tomat 才可以看到效果?开始新一轮的折腾计划吧…
网上有文章说这个插件可以解决热部署,经过实验,这个不行。
1.官网2013年后已经停止更新,最新版本是tomcat7-maven-plugin, 不过仍然可以启动tomcat 9.0.
2.这个插件无法和tomcat插件配合,原因在于tomcat插件启动后,是没有manger页面的。而这个插件必须通过manger页面来发布war包。所以只能手动从命令行启动tomcat,然后再通过tomcat7:deploy这个mvn命令启动这个插件。虽然这样可以正常工作,但是,看不到console log,也无法像网上说的那样通过tomcat7:redeploy命令进行热部署。
各种错误解决:
计划把部署目录放到 target/hotsite目录,所以在pom.xml里面做如下修改:
${basedir}/target/hotsite/WEB-INF/classes/
org.apache.maven.plugins
maven-compiler-plugin
${maven.compiler.plugin.version}
1.8
UTF-8
org.apache.maven.plugins
maven-war-plugin
${maven.war.plugin.version}
通过前面的设置class文件已经完成热部署,但是还有两个部分:一个是webapp目录下的前端文件,另一个是lib里面的jar文件。
有人说如果把class文件输出到 src/main/webapp/WEB-INF/classes 下面,把整个webapp目录当作部署目录,就不用考虑前端文件了。
是这样的。但是,这样做存在很多不好的影响:
所以,我的思路是考虑将前端文件热部署过来,到target/hotsite目录。
幸运的是,vsc里面有一个deploy插件。刚好可以完成这个功能。按ctrl+shift+p --> ext install deploy 即可完成安装。然后在vsc的settings.json里面做如下配置:
"deploy": {
"packages": [
{
"name": "前端",
"description": "webapp里面的所有文件",
"files": [
"src/main/webapp/*",
"src/main/webapp/*.*",
"src/main/webapp/*/*.*",
"src/main/webapp/*/*/*.*",
],
"exclude": [
"src/main/webapp/test/*"
],
"deployOnSave": true,
"useTargetList": true,
"button": {
"text": "热部署",
"tooltip": "点击这里将前端部署到hotsite",
"targets": [ "HOTSITE" ]
},
}
],
"targets": [
{
"type": "local",
"name": "HOTSITE",
"description": "A local folder",
"dir": "target/hotsite/",
"mappings": [
{
"source": "src/main/webapp",
"isRegEx": false,
"target": "/"
}
]
}
]
}
配置完成后效果如下图:
下面会出现热部署按钮,点击即可部署整个前端目录到target/hotsite. (提示见上图前3行)
当修改某一个网页后按crtl+s保存时,即可自动部署到target/hostsite目录。(提示见上图最后2行)
这个一般不经常改动,直接maven package打包后,复制一份到src/main/webapp/WEB-INF/lib即可。
如果您经常改动,也可以借助deploy插件来完成这部分。
将tomcat的虚拟目录指向target/hotsite,并允许热加载即可。
在tomcat插件上点右键,Open Server Configuration,然后做如下配置:
重点:
autoDeploy=“false”
reloadable=“true”
docBase=“xxx/target/hotsite”
如果您需要重启tomcat,也可以使用autoDeploy=“true”。
xxx替换成你自己的项目目录即可。
这样终于大功告成了。
第一次,
以后每次都无需操作了,保存即部署。
实验一下,启动tomcat插件里的tomcat,然后修改一个java或网页文件。无需重启了。
tomcat控件不支持像添加war包那样添加目录。所以只有借助虚拟目录配置来完成目标。这样的坏处是tomcat插件下面看不到调试的项目,而且 docBase=“xxx/target/hotsite” 这样等于写死了目录(${workspaceFolder}这样的变量也不支持)。多个项目直接不方便动态启用、停用。