spring boot 專案由jar轉war
spring boot 專案由jar轉war
spring boot 快速構建web專案,官方推薦使用jar型別內嵌tomcat等容器的方式啟動及部署,使用過程中難免要使用外部容器部署,可以通過以下方式轉化:
第一步:
轉化jar型別專案為可部署的war檔案的第一步是提供一個SpringBootServletInitializer
子類和覆蓋它的configure
方法。通常做法是,讓應用程式的入口類繼承SpringBootServletInitializer:
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
注意:不同版本繼承的
SpringBootServletInitializer
類不同
1.3.3版本為org.springframework.boot.context.web.SpringBootServletInitializer
1.4.1版本為org.springframework.boot.web.support.SpringBootServletInitializer
第二步:
若專案使用maven並且pom.xml繼承了spring-boot-starter-parent
,需要更改pom.xml中的packaging
為war
型別:
<packaging>war</packaging>
若使用Gradle
:
apply plugin: 'war'
第三步:
最後一步是確保嵌入servlet容器不干擾外部servlet容器部署war檔案。需要標記嵌入servlet容器的依賴為provided
。
若使用Maven
:
<dependencies>
<!-- … -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- … -->
</dependencies>
若使用Gradle
:
dependencies {
// …
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
// …
}
若war在部署到容器中時遇到
Project facet Cloud Foundry Standalone Application version 1.0 is not supported.
錯誤;
解決辦法: 專案右鍵Build Path -> Configure Build Path -> Project facet -> 勾掉Cloud Foundry Standalone Application
重新編譯打包即可。
參考 :
的以下兩小節
81.1 Create a deployable war file
63.2 Packaging executable jar and war files
我是結尾。