1. 程式人生 > >springBoot專案打war包,部署到外部tomcat;解決打包後resources下的檔案全部丟失

springBoot專案打war包,部署到外部tomcat;解決打包後resources下的檔案全部丟失


2018-08-29  小賴   文件初始化

springBoot 帶有內建Tomcat 伺服器,可以直接將專案打包成jar執行,但是如果在需要把專案達成war包該怎麼辦呢?下面是將springboot專案部署為war專案的一些步驟

1. pom.xml中將打包形式jar修改為war

修改前:

<packaging>jar</packaging>

修改後:

<packaging>war</packaging>

2. 移除原有內建Tomcat

將springboot內建的Tomcat依賴移除 ,需要注意的是,使用不同的模板引擎的時候,需要移除的依賴位置也不同,下面是原生的依賴和thymeleaf 模板引擎移除依賴的一些方法 (後面打包發現。 可以不需要在依賴中去除tomcat 依賴直接新增)。

# 原生Tomcat依賴移除
<dependency>
       <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
         <exclusions>
             <exclusion>
                   <groupId>org.springframework.boot</groupId>
                   <artifactId
>
spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>
provided</scope> </dependency> # thymeleaf 模板引擎依賴移除 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>

新增的依賴:

<!--因配置外部TOMCAT 而配置-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
<!--因配置外部TOMCAT 而配置-->

3. 設定打包後的專案訪問名稱

設定打包後的專案訪問名稱,在build節點裡設定檔名 <finalName>ROOT</finalName>(這裡是一個特別需要注意的地方,由於開始的時候是使用的單模組程式,所以可以對專案命名,但是在多模組打包中發現,如果新增專案名稱 這個結點。打包好的程式在tomcat中執行的時候會發生錯誤,war 包的目錄格式有問題,建議finalName設定的名稱 == artifactId名稱

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
    <finalName>ROOT</finalName>
</build>

4. 初始化 Spring 應用上下文

由於我們需要使用外部Tomcat伺服器部署war包,所以不能使用建立專案的application.java 這個main方法了,需要重寫一個類似於 web.xml 檔案配置的方式來啟動 Spring 應用上下文,此時我們需要宣告一個類,這個類的作用與在 web.xml 中配置負責初始化 Spring 應用上下文的監聽器作用類似。

我們平常用main方法啟動的方式,都有一個App的啟動類,程式碼如下:

@SpringBootApplication
public class BootWithActivitiApplication extends WebMvcConfigurerAdapter
{

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

Application類的同級新增一個SpringBootStartApplication類,其程式碼如下:

public class SpringBootStartApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 注意這裡要指向原先用main方法執行的Application啟動類
        return builder.sources(BootWithActivitiApplication.class);
    }
}

5. 部署

略。

基本上到這步就算是成功了,沒有遇到下述問題可略過。

6.解決打包後resources下的檔案全部丟失

打包後resources下的檔案全部丟失,如下圖所示:
這裡寫圖片描述
classes資料夾下只有com開頭的class檔案,resources中的配置檔案、靜態資源都沒有打包進來。

解決辦法:Application類上面的有註解@ComponentScan導致檔案丟失,去掉此註解即可。(不一定只有這一個原因,其他原因還未發現。) 網上還有另一個造成此問題

修改前:

@SpringBootApplication
@ComponentScan({"org.activiti.rest.diagram","com.spcx.activiti"})
public class BootWithActivitiApplication extends WebMvcConfigurerAdapter{
}

修改後:

@SpringBootApplication
public class BootWithActivitiApplication extends WebMvcConfigurerAdapter{
}