IDEA 中 Spring Boot+Jsp 项目使用插件启动的方式 Debug 项目,Debug 失效的问题

背景:

       因为web页面用的是Jsp,Spring Boot默认是不支持Jsp作为视图的,所以直接用Application启动项目,会出现访问Jsp页面404的问题,然后此时可以用Spring Boot的插件启动方式,就相当于执行命令行:mvn spring-boot:run 

使用这种方式启动Spring Boot项目就可以访问到Jsp页面了。但是此时你用Debug的方式进行插件启动项目,如果出现打断点无效的问题,可以看看是不是热部署的问题。

前提:项目使用 Jsp、项目启动是用插件启动的方式

原因:

1.  如果你项目满足上述的前提条件,并且使用了 devtools 热部署即 pom 文件中引入了这个依赖,则此时 debug 插件启动项目,断点会失效,删除这个依赖问题解决。

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
   <optional>true</optional>
</dependency>

2.  如果你的 pom 文件中没有添加热部署的这个依赖,但是在pom文件中的 <plugin>标签下添加了<fork>true</fork>(和devtools相关的)这行代码,则此时 debug 插件启动项目,断点也会失效,改为 false ,问题解决。

     fork 标签:将依赖项标记为可选是防止devtools使用您的项目传递应用于其他模块的最佳实践(官方文档),也不懂啥意思

<configuration>
    <fork>true</fork>
    <!-- spring-boot:run 控制台中文乱码解决 -->
    <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
</configuration>

3. 如果你的 pom 文件中既有热部署的依赖也有 fork 标签,并且<fork>true</fork>,此时只要将 true 改为 false ,debug 插件启动项目就可以正常打断点了,同时热部署也就失效了。

结论:

如果你的Spring Boot项目使用了Jsp视图,并且项目是以插件启动的方式启动,则此时使用 devtools 热部署就无法使用 debug ,使用 debug 就无法使用 devtools 热部署,在这种前提条件下要想两者同时使用需要做一些另外的配置,可以参考这篇博客  idea中Debug调试Spring Boot项目配置步骤(插件启动)

补充:

     如果你的视图使用的是 .jsp 时会出现这种情况,使用 .html 就不会出现这种情况, 因为视图是 .html 文件的时候可以直接用Application启动,问题就出现在 .jsp 插件启动,可以尝试不用插件启动,针对Spring Boot + Jsp 参考网上教程做一些配置,用Application启动,就不会出现这些冲突问题。

发布了118 篇原创文章 · 获赞 20 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/zhang33565417/article/details/100164577