springboot发布为jar时无法携带jsp,将springboot项目发布为war包

前言:

首先此文章的出现,更多是对自己的项目过程做一些整理,若有人读到其中的内容,有所帮助,萌新程序员我也是很高兴,其次在这要感谢CSDN中大佬们给我的经验,若不是读了他们的文章,也不会写出这份文档,从此儿说本应是转载,但是无法找到他们的博名了,再此向这里可能出现同类文字的前辈表示道歉


原因:
由于在项目建立到一半时,技术点几乎都要应用完时,就设想将项目发布一下,尝试是否能正常在eclipse外进行运行,但是从中发现了一些问题:

  1. 首先时springboot无法将项目中WEB-INF中的jsp等网页文件进行打包
  2. springboot中内嵌的tomcat无法使用jsp(但实际上并不是什么问题,因为在项目开发阶段中,就通过pom文件解决了,但由于属于项目的一部分,就一同编写了)
    解决方案:
    问题2:
    首先解决问题2,因为这只是为tomcat添加一点小功能而已
<!-- 给内嵌的tomcat添加jsp编译器 -->
<dependency>
               <groupId>org.apache.tomcat.embed</groupId>
               <artifactId>tomcat-embed-jasper</artifactId>
               <scope>provided</scope>
        </dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>

以上添加了对jsp的支持,与jstl的支持
问题1:
通过pom文件中添加以下部分将所有文件都给予打包:

  1. 在dependencies中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
  1. 添加以下配置
<build>        
  <plugins>
          <plugin>
                  <groupId>org.springframework.boot</groupId>
                 <artifactId>spring-boot-maven-plugin</artifactId>
                 <version>1.4.2.RELEASE</version>
          </plugin>
  </plugins>
  
<resources>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/**</include>
      </includes>
   </resource>
   <resource>
     
     <directory>src/main/webapp</directory>
   </resource>
</resources>
 </build>
  1. 修改pom打包方式
<packaging>jar</packaging>

做了以上修改后,项目可以正常打包了,但在这时又出现了一个问题,打包后的jar包通过解压软件查看,也许是我道行不行,特别混乱,以至于通过 java -jar 进行运行时,项目都没用执行我设定的banner图,项目也没能正常运行.
而后我也到网上找为什么,通过以为CSDN的博主所说,原因是spring-boot-maven-plugin对1.5版本的springboot不适配,于是我又更换了springboot的版本从1.5.14更换至1.4.2,可依旧是没有什么用,让我有一些心灰意冷了,于是最后,我也只能规避这个问题,退之发布war包的路线上.

springboot发布war包解决方案:
1. 在pom文件中为项目起名,以免发布后丢到tomcat中运行不了

<build>
<finalName>在这写你的项目名称</finalName>
 </build>
  1. 更正项目打包方式为war包
<packaging>war</packaging>
  1. 对springboot启动类下手
@SpringBootApplication
@MapperScan("com/main/mapper")   //扫描Mapper接口
@EnableTransactionManagement        //启用事务注解
@EnableScheduling  //启用定时器注解
@Controller
public class DRCMaiJinApplication{
 
@Autowired
IUserIndexService service;
 
 
 
public static void main(String[] args) {
SpringApplication.run(DRCMaiJinApplication.class, args);
}
 
}

这是我最初的启动类

@SpringBootApplication
@MapperScan("com/main/mapper")   //扫描Mapper接口
@EnableTransactionManagement        //启用事务注解
@EnableScheduling  //启用定时器注解
@Controller
public class DRCMaiJinApplication extends SpringBootServletInitializer{

@Autowired
IUserIndexService service;

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(DRCMaiJinApplication.class);
}


public static void main(String[] args) {
SpringApplication.run(DRCMaiJinApplication.class, args);
}

}

这是我更正后的启动类,由于的项目还需要再继续开发,所以这其中的主方法我没有删除,依旧基于保存,修改部分是添加了父类SpringBootServletInitializer,并重写configure方法其中的返回值中的class对象传入的就是启动类
而后通过maven进行war包打包,tomcat正常运行,包括配置的外部图片地址,等等信息正常使用