最近,我在尝试将一个本地使用SpringBoot开发的WEB前后端项目部署到线上环境进行运行。过程中,遇到了一个问题,就是将打包后的jar包部署到本地与线上环境并运行后,发现尽管程序是可以正常运行跑起来了,但是,工程项目的前端页面却始终显示404(页面无法被找到),这个问题,是我在本地使用IDEA环境运行项目代码时候,不曾发现到的BUG问题。于是乎,我就开启了一趟,针对这个问题的踩坑排查之旅。

首先,想到的导致问题现象出现的原因点,是本地通过的是IDEA运行环境执行的代码,并不是通过jar包来直接执行,并得到运行结果的,因此,发现到了可能出错的问题方向:就是下图中这个目录下的静态资源文件,如果不对打包插件的resources部分做专属的设置,在正常情况下,/src/main/webapp/目录下的相关的文件内容,是无法正常被打包到最后生成的jar包之中的,默认情况下,是仅仅会打包/src/main/resources/目录下的资源文件到jar包之中。

通过解压打出的jar包,可以看到,所需要的前端资源html等文件,确实没有被打入jar包之中:
jar -xvf o2o-1.0-SNAPSHOT.jar

于是乎,我做了第1次的尝试改造如下:

再次使用打包命令:
mvn clean package -DskipTests
使用jar包的解包命令解压jar包,并查看效果:
jar -xvf o2o-1.0-SNAPSHOT.jar

本地运行jar包:
java -jar o2o-1.0-SNAPSHOT.jar
于是乎,又踩到了一个坑,报错内容如下:

经排查,报错问题的原因:由于修改了打包插件对resouces部分的定义,导致/src/main/resources/目录下的配置资源文件并没有如预期般那样被打入jar包。
再次修改打包插件中,对resouces部分的定义,补充丢失的部分:

再次打包并运行之后,验证相关的html文件确实是已经被打入jar包指定的目标位置:
META-INF/resources目录下,同时,项目代码也正确跑起来了,

然而,再次前往前端页面进行查验效果的时候,还是看到了这个界面:

这个,就是本次操作最让我头疼的一个点了,因为经过排查,该打入的静态资源文件也打入了,然后使用IDEA运行项目的时候,前端资源也可以正常进行呈现,但是,一旦打成jar包运行后,前端页面就始终会告知"404 NOT FOUND"的错误。然后,我经过很多次尝试后,均始终没有得到打成jar包后应当正确运行的预期效果。经过很多次包括和AI以及传统搜索引擎的交互,以及个人的操作尝试后,终于,在通过这篇博文的提示下,找到了问题的症结所在。
springboot 将jsp项目打成jar包 出现404错误-优快云博客

原来,是使用的SpringBoot打包插件版本出现了问题,默认选择的是,看着更高且稳定的1.5.8.RELEASE版本(继承自SpringBoot自身Starter的版本),然而,实际真正应该使用的却是1.4.2.RELEASE,这个比较低一些的版本。最后,经过对这个打包插件版本的调整之后,终于,是可以跑通整个前后端的WEB项目了,就这个404的问题,前前后后折磨了我差不多2天的时间。


项目的WEB前端页面,最终在不懈的尝试努力之下,还是正常显示了,很开心。


1094

被折叠的 条评论
为什么被折叠?



