练手的项目每次有源码或者页面更新都需要重新启动,不能忍,热部署走一波
这个项目是用外置Tomcat启动的
项目层级目录
模块依赖关系:service 依赖于 model 依赖于 api
(启动类在service模块中)
引入devTools依赖,确定相关idea配置无误后,发现热部署没有生效
得出结论: devTools无法对使用对外置的tomcat运行的项目生效
于是在网上搜索外置tomcat项目实现热部署的方法
tomcat实现热部署
按照以上方法的确实现了热部署,但是热部署的延迟太长了,感觉每次都会有大量代码重新编译,伴随着当前项目被install进本地仓库 (excuse me? 我没打算将项目install进本地仓库啊 这个操作不是浪费时间么) 也许是我的相关配置不到位吧,由于比较排斥这种热部署方式,遂不深究,还是准备使用devtools 所以将项目改成使用内置tomcat运行
具体步骤:
- 对server模块的pom文件进行修改
(1) 首先将打包方式由war变为jar
(2) 由于项目视图使用的是jsp 所以需要添加jsp相关jar包和启动器 否则无法解析jsp视图 可能会报错:This application has no explicit mapping for /error, so you are seeing this as a fallback.
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<!--版本略->
<!--此外,最好将内置spring-boot-starter-web的内置tomcat排除,重新引入scope为provided的tomcat依赖 ->
- 配置项目工作目录 由于该项目是多模块项目,使用jsp需要指定当前模块为工作路径(默认是根路径)
edit configurations > 找到启动类 > configuration > working directory > 填写%MODULE_WORKING_DIR%
配置文件不需要修改
从外置tomcat转为内置tomcat运行,可能会出现jar包冲突 e.g 日志jar包的冲突 e.g.
Class path contains multiple SLF4J bindings.
将slf4j-log4j12
从项目中移除即可