springboot发布为jar时无法携带jsp,将springboot项目发布为war包
前言:
首先此文章的出现,更多是对自己的项目过程做一些整理,若有人读到其中的内容,有所帮助,萌新程序员我也是很高兴,其次在这要感谢CSDN中大佬们给我的经验,若不是读了他们的文章,也不会写出这份文档,从此儿说本应是转载,但是无法找到他们的博名了,再此向这里可能出现同类文字的前辈表示道歉
原因:
由于在项目建立到一半时,技术点几乎都要应用完时,就设想将项目发布一下,尝试是否能正常在eclipse外进行运行,但是从中发现了一些问题:
- 首先时springboot无法将项目中WEB-INF中的jsp等网页文件进行打包
- 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文件中添加以下部分将所有文件都给予打包:
- 在dependencies中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
- 添加以下配置
<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>
- 修改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>
- 更正项目打包方式为war包
<packaging>war</packaging>
- 对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正常运行,包括配置的外部图片地址,等等信息正常使用