1. 程式人生 > >Spring-boot--構建war包

Spring-boot--構建war包

在IDEA中預設spring boot都是構建成jar包,然後使用內建的容器執行,如果要部署到應用伺服器,則需要將應用打包成為一個獨立的jar或者war。然後放到伺服器中去部署。
1、修改pom檔案

加上這句配置,指定maven打包為war包
<packaging>war</packaging>

2、指定容器啟動初始化類
WAR檔案裡沒有啟用Spring MVC DispatcherServlet
的web.xml檔案或者Servlet初始化類,這個WAR檔案就一無是處。Spring Boot出馬了。它提供的SpringBootServletInitializer是一個支援Spring Boot的
SpringWebApplicationInitializer實現。除了配置Spring的DispatcherServlet, SpringBootServletInitializer還會在Spring應用程式上下文裡查詢Filter、Servlet或ServletContextInitializer型別的Bean,把它們繫結到Servlet容器裡。要使用SpringBootServletInitializer,只需建立一個子類,覆蓋configure()方法
來指定Spring配置類。
我們可以直接將Application這個啟動類繼承於SpringBootServletInitializer

@SpringBootApplication
public class Application extends SpringBootServletInitializer {


    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(Application.class);
    }


    public static void main(String[] args) {
        SpringApplication.run(Application.class , args);
    }


}

3、這個時候可以進行打包了,clean ,compile,package
報錯:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.2:war (default-war) on project spring2: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1

說的很明白,打包找不到web.xml檔案,但是spring boot是不需要這個配置檔案的。原因還是在pom檔案中, 加上maven打包外掛。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.1.1</version>
    <configuration>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
</plugin>

在外掛maven-war-plugin 3.0版本之前,必須將failOnMissingWebXml配置設定為false,也就是不需要web.xml也進行打包。但是在3.0版本,已經可以自動跳過這個地方了,不會強制要求,配置完成之後,再進行一次package。在target目錄下面就能找到需要的war包了。

spring boot將應用打包成war包,不影響在IDEA中執行啟動,日常開發測試不影響,簡直不要太爽。