Converting Spring Boot JAR into WAR

ปกติการสร้าง Application ด้วย Spring Boots เรามักจะได้ JAR file 
ซึ่งสามารถเอาไป Execute ได้เลย
เนื่องจาก Spring Boot ได้ Embedded Tomcat ให้เราแล้วเรียบร้อย แต่ก็มีบางท่านที่อยากได้ WAR file ที่สร้างจาก Spring Boot เพื่อเอาไป deploy บน Application Server อื่นๆ ได้ ก็มีวิธีง่ายๆ ไม่ยุ่งยากเลยครับ เริ่มต้นจาก pom.xml ของเราก่อน

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
>
<modelVersion>4.0.0</modelVersion>

<groupId>zengcode.medium.com</groupId>
<artifactId>application</artifactId>
<version>1.0-SNAPSHOT</version>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
<relativePath/>
</parent>
      <!-- <properties>
<start-class>com.xxx.ForWAR</start-class>
</properties>
-->
      <packaging>war</packaging>
       <dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

ใน <packaging> ให้เป็น war นะครับ และระบุ spring-boot-starter-tomcat ให้ scope เป็น provider

ใน Spring Boot Application ให้ทำตามนี้ได้เลยครับ

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}

เมื่อ เรารัน mvn clean install เราก็จะได้ application-0.0.1-SNAPSHOT.war

แต่เราก็ยังสามารถ run ด้วย java ได้ด้วย 
java -jar application-0.0.1-SNAPSHOT.war

เรียบร้อยโรงเรียน Spring Boot ครับ

Show your support

Clapping shows how much you appreciated Chiwa Kantawong (Pea)’s story.