Stringboot项目打war包

正常的boot项目打包打的是jar包,boot项目内置tomcat,通常我打包是:mvn clean install -Dmaven.test.skip 命令java

clean 移除全部上一次构建生成的文件spring

install 将包安装至本地仓库,以让其它项目依赖tomcat

maven.test.skip 跳过测试服务器

运行的命令:java -jar xxx.jarapp

       因为一些外部的缘由咱们须要将项目打包成war包,这时候咱们能够建立一个新的boot项目选择war包的方式进行参考,这种方式的是spring官方推荐的打包方式,其实打war包也就进行了一下几步操做:maven

一、在pom.xml文件首部增长<packaging>war</packaging>,/
<groupId>com.uloan.ssm</groupId>
<artifactId>Uloan</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<!--<packaging>jar</packaging>-->
二、<!--增长下面的依赖覆盖默认内嵌的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的属性来定义路径ide

因此咱们这里采用provided,这也是spring官方推荐的方式。spring-boot

剩下的就是将咱们的启动类进行修改,咱们以前启动类是boot的启动方式,咱们这边要修改为tomcat的方式,固然以前的boot启动方式在咱们本地依旧保留使用。测试

public class ServletInitializer extends SpringBootServletInitializer {ui

    @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容器了。

相关文章
相关标签/搜索