@@ -1889,17 +1889,89 @@ after which you can run the application with
1889
1889
1890
1890
[[howto-create-a-deployable-war-file]]
1891
1891
=== Create a deployable war file
1892
- Use the `SpringBootServletInitializer` base class, which is picked up by Spring's
1893
- Servlet 3.0 support on deployment. Add an extension of that to your project and build a
1894
- war file as normal. For more detail, see the
1895
- http://spring.io/guides/gs/convert-jar-to-war['`Converting a jar Project to a war`'] guide
1896
- on the spring.io website and the sample below.
1897
-
1898
- The war file can also be executable if you use the Spring Boot build tools. In that case
1899
- the embedded container classes (to launch Tomcat for instance) have to be added to the
1900
- war in a `lib-provided` directory. The tools will take care of that as long as the
1901
- dependencies are marked as '`provided`' in Maven or Gradle. Here's a Maven example
1902
- {github-code}/spring-boot-samples/spring-boot-sample-traditional/pom.xml[in the Boot Samples].
1892
+
1893
+ The first step in producing a deployable war file is to provide a
1894
+ `SpringBootServletInitializer` subclass and override its `configure` method. This makes
1895
+ use of Spring Framework's Servlet 3.0 support and allows you to configure your
1896
+ application when it's launched by the servlet container. Typically, you update your
1897
+ application's main class to extend `SpringBootServletInitializer`:
1898
+
1899
+ [source,java,indent=0,subs="verbatim,quotes,attributes"]
1900
+ ----
1901
+ @Configuration
1902
+ @EnableAutoConfiguration
1903
+ @ComponentScan
1904
+ public class Application extends SpringBootServletInitializer {
1905
+
1906
+ @Override
1907
+ protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
1908
+ return application.sources(Application.class);
1909
+ }
1910
+
1911
+ public static void main(String[] args) throws Exception {
1912
+ SpringApplication.run(Application.class, args);
1913
+ }
1914
+
1915
+ }
1916
+ ----
1917
+
1918
+ The next step is to update your build configuration so that your project produces a war file
1919
+ rather than a jar file. If you're using Maven and using `spring-boot-starter-parent` (which
1920
+ configures Maven's war plugin for you) all you need to do is modify `pom.xml` to change the
1921
+ packaging to war:
1922
+
1923
+ [source,xml,indent=0,subs="verbatim,quotes,attributes"]
1924
+ ----
1925
+ <packaging>war</packaging>
1926
+ ----
1927
+
1928
+ If you're using Gradle, you need to modify `build.gradle` to apply the war plugin to the
1929
+ project:
1930
+
1931
+ [source,groovy,indent=0,subs="verbatim,quotes,attributes"]
1932
+ ----
1933
+ apply plugin: 'war'
1934
+ ----
1935
+
1936
+ The final step in the process is to ensure that the embedded servlet container doesn't
1937
+ interfere with the servlet container to which the war file will be deployed. To do so, you
1938
+ need to mark the embedded servlet container dependency as provided.
1939
+
1940
+ If you're using Maven:
1941
+
1942
+ [source,xml,indent=0,subs="verbatim,quotes,attributes"]
1943
+ ----
1944
+ <dependencies>
1945
+ <!-- … -->
1946
+ <dependency>
1947
+ <groupId>org.springframework.boot</groupId>
1948
+ <artifactId>spring-boot-starter-tomcat</artifactId>
1949
+ <scope>provided</scope>
1950
+ </dependency>
1951
+ <!-- … -->
1952
+ </dependencies>
1953
+ ----
1954
+
1955
+ And if you're using Gradle:
1956
+
1957
+ [source,groovy,indent=0,subs="verbatim,quotes,attributes"]
1958
+ ----
1959
+ dependencies {
1960
+ // …
1961
+ providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
1962
+ // …
1963
+ }
1964
+ ----
1965
+
1966
+ If you're using the <<build-tool-plugins.adoc#build-tool-plugins, Spring Boot build tools>>,
1967
+ marking the embedded servlet container dependency as provided will produce an executable war
1968
+ file with the provided dependencies packaged in a `lib-provided` directory. This means
1969
+ that, in addition to being deployable to a servlet container, you can also run your
1970
+ application using `java -jar` on the command line.
1971
+
1972
+ TIP: Take a look at Spring Boot's sample applications for a
1973
+ {github-code}/spring-boot-samples/spring-boot-sample-traditional/pom.xml[Maven-based example]
1974
+ of the above-described configuration.
1903
1975
1904
1976
1905
1977
0 commit comments