被springboot项目maven打包、启动、访问折腾的头都大了,一步一个坑,在解决了所有的问题之后,那种欣喜若狂的心情只有自己能体会,决定要好好记录一下了,废话不多说了,直接进入正题。

问题和排查流程:

为了扩展和规范,搭建的springboot项目是一个多模块项目,于是,问题来了,下面一个个说:

1.项目搭建完成后,application.yml文件配置了mvc视图解析器,写了一个controller测试,发现能进controller方法,但是死活输出不了页面,浏览器报错如下:

上网查了很多资料,有些说springboot整合jsp要通过spring-boot:run方式启动,具体可以参考:https://segmentfault.com/a/1190000009785247

后来我又重新搭建了一个简单的springboot工程(注意:这一次不是多模块项目),通过main方法启动,却又能正常跳转jsp页面,我....

2.看来是多模块工程非得通过spring-boot:run启动,具体原因待有缘人补充,这时候我尝试通过spring-boot:run启动,但是打开maven结构图,发现Plugins下并没有spring-boot插件,原来是因为pom.xml中没有配置spring-boot插件导致的,兴致匆匆的配置了spring-boot plugins,很开心,maven结构图出现了亮眼的spring-boot插件

3.然而一切并没有那么顺利,当我执行mvn -package时,居然报错很多类找不到,我....,我就多添加了一个plugin而已啊,有必要这么折磨我么,后来参考网上的文章,添加了<classifier>exec</classifier>这么一个配置,如下:

赶紧试了一把,好了,这次package终于没报错了,然后我就匆忙点击spring-boot:run准备启动项目了,然鹅....

4.启动报错,提示我没有配置mainClass,原来是因为项目中含有main方法的class有点多,springboot有点蒙圈不知道找哪一个,于是在plugin中又加了一个配置<mainClass>com.mmz.WebApplication</mainClass>,指定了主类

5.然鹅,还是有问题,启动仍然报错,只不过这次报错不一样了,报classNotFundException,找不到我配置的WebApplication类。。。我很难受呀

6.查资料啊查资料,网上并没有相关文章,后来又怀疑是多模块项目惹的祸,重新用简单的项目试验了一把,结果简单的项目就好好地运行并没有报错,于是仔细检查了一下两个项目的配置,发现启动简单工程时,启动的本身就是web模块,而我启动多模块工程时,运行的是root模块下面的spring-boot插件,怀疑跟这个有关,于是尝试启动了web模块下面的spring-boot:run,妈呀,终于启动成功,并且能正常访问页面了,这一刻把我激动的。。。

7.你以为这样就可以了吗??下午试了一把把项目打包成jar的方式,运行java -jar xxx.jar方式启动,启动成功,但是仍然没法访问jsp页面,解压jar包发现根本没有把webapp目录以及其目录下的jsp页面打包进去,因为springboot插件打包默认不会打包自己添加的webapp目录,于是需要在pom.xml下的build标签里指定maven 打包目录如下:

这时候重新打包成jar解压,发现打包进了对应的目录下,赶紧访问页面试了一把,结果......嗯,还是不可以,报了同样的错误...

8.查阅资料,最后一步还需要指定spring-boot-maven-plugin的版本为1.4.2.RELEASE,其他版本都不行,据说是springboot的一个bug,于是添加了version后,再试了一把终于可以了。。至此,一个完成的spriongboot+maven,打包+启动终于完整了。最终配置如下:

<build>
<resources>
<!-- 打包时将jsp文件拷贝到META-INF目录下-->
<resource>
<!-- 指定resources插件处理哪个目录下的资源文件 -->
<directory>src/main/webapp</directory>
<!--注意此次必须要放在此目录下才能被访问到-->
<targetPath>META-INF/resources</targetPath>
<includes>
<include>**/**</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/**</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.4.2.RELEASE</version>
<configuration>
<mainClass>com.mmz.WebApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>

  nice,接下来就是把自己的项目打好jar包放到腾讯云服务器上运行了。。。

多模块springboot项目启动访问不了jsp页面的更多相关文章

  1. springBoot项目启动类启动无法访问

    springBoot项目启动类启动无法访问. 网上也查了一些资料,我这里总结.下不来虚的,也不废话. 解决办法: 1.若是maven项目,则找到右边Maven Projects --->Plug ...

  2. springboot项目启动无法访问到controller原因之一:引导类位置有问题

    新建的springboot项目启动后,无法访问到controller 页面是404错误 查看项目结构,发现是新建工程的启动类位置有问题,controller类应该位于引导类的同级包或者子级包中.需要将 ...

  3. 使用Gradle构建多模块SpringBoot项目

    使用Gradle构建多模块SpringBoot项目 本项目使用Gradle构建SpringBoot项目,将不同的业务进行不同的模块划分(不做微服务与分布式架构); - 编辑器:Intellij IDE ...

  4. Springboot 项目启动后执行某些自定义代码

    Springboot 项目启动后执行某些自定义代码 Springboot给我们提供了两种"开机启动"某些方法的方式:ApplicationRunner和CommandLineRun ...

  5. SpringBoot项目启动时链接数据库很慢

    SpringBoot项目启动时链接数据库很慢 springboot项目在启动时候,如下图所示,链接数据库很慢 解决方法:在mysql 的配置文件中 配置 skip-name-resolve

  6. springboot项目启动成功后执行一段代码的两种方式

    springboot项目启动成功后执行一段代码的两种方式 实现ApplicationRunner接口 package com.lnjecit.lifecycle; import org.springf ...

  7. springboot项目启动之后初始化自定义配置类

    前言 今天在写项目的时候,需要再springboot项目启动之后,加载我自定义的配置类的一些方法,百度了之后特此记录下. 正文 方法有两种: 1. 创建自定义类实现 CommandLineRunner ...

  8. 【log4j】springboot项目启动 ,使用的druid数据源,log4j报错 log4j:WARN Please initialize the log4j system properly.

    springboot项目启动 ,使用的druid数据源,log4j报错 -- :: --- [ restartedMain] o.hibernate.annotations.common.Versio ...

  9. Springboot项目启动不了。也不打印任何日志信息。

    Springboot项目启动不了.也不打印任何日志信息. <!-- 在创建Spring Boot工程时,我们引入了spring-boot-starter,其中包含了spring-boot-sta ...

随机推荐

  1. redis实现分布式锁--工具类

    1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  2. Windows10安装ubuntu16.04双系统教程

    写在前面:本教程为windows10安装ubuntu16.04(64位)双系统教程,是我多次安装双系统的经验总结,安装方法同样适用于ubuntu18.04(64位).为了直观和易于理解,我会尽量图文并 ...

  3. shiro实战(2)--ssm

    一.web.xml的配置 <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi=& ...

  4. jQuery 源码分析(二十) DOM操作模块 插入元素 详解

    jQuery的DOM操作模块封装了DOM模型的insertBefore().appendChild().removeChild().cloneNode().replaceChild()等原生方法.分为 ...

  5. 使用matplotlib.pyplot中scatter()绘制散点图

    1.二维散点图 二维散点图的函数原型: matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=Non ...

  6. Swoole Redis 连接池的实现

    概述 这是关于 Swoole 入门学习的第九篇文章:Swoole Redis 连接池的实现. 第八篇:Swoole MySQL 连接池的实现 第七篇:Swoole RPC 的实现 第六篇:Swoole ...

  7. python-Redis模块常用的方法汇总

    Redes模块常用的方法汇总 一.创建建Redis对象 1.直接使用 import redis r = redis.Redis(host='127.0.0.1', port=6379) 2.连接池使用 ...

  8. Erlang/Elixir精选-第3期(20191216)

    2019年,Erlang社区在应用层上除了aeternity区块链让人印象深刻(Killer App)外,就没有特别出彩的应用出现.在Web,IoT,MessageQueue这些成熟领域,已经有相当成 ...

  9. 剑指offer 21:包含min函数的栈

    题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 解题思路 要求在O(1)时间内完成,由于栈后进先出的原则,不能出现破坏栈结构的事情.因 ...

  10. win7下安装MySQL5.7教程

    MySQL官网下载5.7  zip安装包 地址:https://dev.mysql.com/downloads/mysql/5.7.html#downloads 1.解压mysql-5.7.14-wi ...