{{announcement.body}}
{{announcement.title}}

Deploy Spring Boot Apps From Jar to War

DZone 's Guide to

Deploy Spring Boot Apps From Jar to War

In this article, see how to deploy Spring Boot apps from jar to war.

· Java Zone ·
Free Resource

Make it Platform-Independent 

Developing Spring Boot applications could be easy these days with the likes of annotations and initializes as Maven, Spring Boot, and embedded servers. 

So as we know when building a Spring Boot application, by default, we package the application into a JAR file and execute our main application class into a main embedded tomcat server. We then run our application tests, web app, or REST endpoints within our environment for easy testing and debugging.

What if we want to make our application server independent and drop our application on other servers like Weblogic, Jboss, Wildfly, etc.?

In order to do this, we have to make our application a WAR file.  

Here are simple steps to do so:

1. Update your maven pom.xml with the following changes    

Set your packaging tag to war

Java
 




x


 
1
    <packaging>war</packaging>
2




Set all Tomcat Jar files to provided

Java
 




x


 
1
<dependency>
2
 <groupId>org.springframework.boot</groupId>
3
 <artifactId>spring-boot-starter-tomcat</artifactId>
4
 <scope>provided</scope>
5
</dependency>



Then, we need to update the maven-war-plugin ,  not to fail if web.xml is missing. This can be done by updating the plugin information in the build tag and by removing the  org.springframework.boot  plugin in the pom as shown below:

Java
 




xxxxxxxxxx
1
21


 
1
<plugins>
2
            <!--  <plugin>
3
                <groupId>org.springframework.boot</groupId>
4
                <artifactId>spring-boot-maven-plugin</artifactId>
5
            </plugin>
6
            -->
7
            <plugin>
8
            <groupId>org.apache.maven.plugins</groupId>
9
            <artifactId>maven-war-plugin</artifactId>
10
            <version>3.1.0</version>
11
            <executions>
12
                <execution>
13
                    <id>default-war</id>
14
                    <phase>prepare-package</phase>
15
                    <configuration>
16
                        <failOnMissingWebXml>false</failOnMissingWebXml>
17
                    </configuration>
18
                </execution>
19
            </executions>
20
        </plugin>
21
        </plugins>



2. Update your Main class to extends SpringBootServletInitializer    

Java
 




xxxxxxxxxx
1
13


 
1
@SpringBootApplication
2
public class SpringBootWarDeploymentApplication  extends SpringBootServletInitializer {
3
    
4
    @Override
5
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
6
        return application.sources(SpringBootWarDeploymentApplication.class);
7
    }
8
 
          
9
    public static void main(String[] args) {
10
        SpringApplication.run(SpringBootWarDeploymentApplication.class, args);
11
    }
12
}
13
 
          



3. Rename your file SpringBootWarDeployment-0.0.1.war to your desired name springrestapi.war

4. Check if your Server container has missing web.xml file capabilities 

We generally want version numbers out of our build files as certain containers fails to deploy dash versions.

Conclusion

This worked for me, generally, I downloaded Apache Tomcat 8.5 and edited the pom.xml plugin and viola! It worked. All my projects ended up working because Tomcat 8.5 and up accepted no Web.xml and the exclusion thereof.

Have fun, folks! 

Don't forget to like, comment, and share!

Topics:
jar files, java, rest api app, spring 3.0, spring boot 2.2, tomcat 8, tutorial, war file

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}