1. 程式人生 > >Stringboot專案打war包

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