正常的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容器了。