被springboot项目maven打包、启动、访问折腾的头都大了,一步一个坑,在解决了所有的问题之后,那种欣喜若狂的心情只有自己能体会,决定要好好记录一下了,废话不多说了,直接进入正题。
问题和排查流程:
为了扩展和规范,搭建的springboot项目是一个多模块项目,于是,问题来了,下面一个个说:
- 1.项目搭建完成后,
application.yml文件配置了mvc视图解析器,写了一个controller测试,发现能进controller方法,但是死活输出不了页面,浏览器报错如下:
1 2 3 4 5 6
| Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback.
Mon Jan 10 11:23:23 CST 2022 There was an unexpected error (type=Not Found, status=404). /login.xhtml Not Found in ExternalContext as a Resource
|
上网查了很多资料,有些说springboot整合jsp要通过spring-boot:run方式启动,具体可以参考:https://segmentfault.com/a/1190000009785247
后来我又重新搭建了一个简单的springboot工程(注意:这一次不是多模块项目),通过main方法启动,却又能正常跳转jsp页面,我….
- 2.看来是多模块工程非得通过
mavne插件中的spring-boot:run启动,具体原因待有缘人补充,这时候我尝试通过spring-boot:run启动,但是打开maven结构图,发现Plugins下并没有spring-boot插件,原来是因为pom.xml中没有配置spring-boot插件导致的,兴致匆匆的配置了spring-boot plugins,很开心,maven结构图出现了亮眼的spring-boot插件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.3.7.RELEASE</version> <configuration> <mainClass>com.bright.dev.Application</mainClass> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
|
- 3.下午试了一把把项目打包成jar的方式,运行
java -jar xxx.jar方式启动,启动成功,但是仍然没法访问jsp页面,解压jar包发现根本没有把webapp目录以及其目录下的jsp页面打包进去,因为springboot插件打包默认不会打包自己添加的webapp目录,于是需要在pom.xml下的build标签里指定maven 打包目录如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <build> <resources> <resource> <directory>src/main/webapp</directory> <targetPath>META-INF/resources</targetPath> <includes> <include>**/**</include> </includes> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> </build>
|
这时候重新打包成jar解压,发现打包进了对应的目录下,赶紧访问页面试了一把,结果……嗯,还是不可以,报了同样的错误…
- 4.原文作者执行完上述步骤之后依然不行,我和原作者使用的
spring-boot-maven-plugin版本不同,我使用的是2.3.7.RELEASE,原作者测试可以使用的版本为1.4.2.RELEASE。以下是我的最终配置:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| <build> <resources> <resource> <directory>src/main/webapp</directory> <targetPath>META-INF/resources</targetPath> <includes> <include>**/**</include> </includes> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.1</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.3.7.RELEASE</version> <configuration> <mainClass>com.hzjp.dev.MedicalCareApplication</mainClass> </configuration> <executions> <execution> <id>repackage</id> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <configuration><encoding>UTF-8</encoding> <nonFilteredFileExtensions> <nonFilteredFileExtension>cer</nonFilteredFileExtension> <nonFilteredFileExtension>pem</nonFilteredFileExtension> <nonFilteredFileExtension>pfx</nonFilteredFileExtension> </nonFilteredFileExtensions> </configuration> </plugin> </plugins> <finalName>backend-manager</finalName> </build>
|
- 5.最终通过查看原作者的链接总结出三种方法,解决多模块无法访问
JSP页面的问题:
1.按照第4步的配置,使用maven插件中的spring-boot:run进行启动。
2.修改启动配置:edit configurations -> working directory设置成$MODULE_WORKING_DIR$就可以了。
3.只需要在pom.xml的build模块中配置上述第三步中的信息即可。
本文参考:https://www.cnblogs.com/xiaoming0601/p/11077491.html
https://segmentfault.com/a/1190000009785247