Stringboot项目打war包
Posted boyliuc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Stringboot项目打war包相关的知识,希望对你有一定的参考价值。
正常的boot项目打包打的是jar包,boot项目内置tomcat,一般我打包是:mvn clean install -Dmaven.test.skip 命令
clean 移除所有上一次构建生成的文件
install 将包安装至本地仓库,以让其它项目依赖
maven.test.skip 跳过测试
运行的命令:java -jar xxx.jar
由于一些外部的原因我们需要将项目打包成war包,这时候我们可以创建一个新的boot项目选择war包的方式进行参考,这种方式的是spring官方推荐的打包方式,其实打war包也就进行了一下几步操作:
1、在pom.xml文件首部增加<packaging>war</packaging>,/
<groupId>com.uloan.ssm</groupId>
<artifactId>Uloan</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!--<packaging>jar</packaging>-->
2、<!--增加下面的依赖覆盖默认内嵌的Tomcat依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
scope的分类
1.compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去
2.test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit
3.runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段
4.provided:打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作
5.system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径
所以我们这里采用provided,这也是spring官方推荐的方式。
剩下的就是将我们的启动类进行修改,我们之前启动类是boot的启动方式,我们这边要修改成tomcat的方式,当然之前的boot启动方式在我们本地依旧保留使用。
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(UloanApplication.class);
}
}
该类继承了SpringBootServletInitializer并且重写了configure方法。
jar包和war包启动区别
jar包:执行SpringBootApplication的run方法,启动IOC容器,然后创建嵌入式Servlet容器
war包: 先是启动Servlet服务器,服务器启动Springboot应用(springBootServletInitizer),然后启动IOC容器
SpringBootServletInitializer实例执行onStartup方法的时候会通过createRootApplicationContext方法来执行run方法,接下来的过程就同以jar包形式启动的应用的run过程一样了,在内部会创建IOC容器并返回,只是以war包形式的应用在创建IOC容器过程中,不再创建Servlet容器了。
以上是关于Stringboot项目打war包的主要内容,如果未能解决你的问题,请参考以下文章