SpringBoot可以创建jar包工程,也可以创建war包工程。
如何创建Jar或War工程这里便不多说,网上有很多。这里介绍下他们的区别:
POM文件区别
-
packaging不同
Jar工程对应jar,War工程对应war
-
依赖不同(特殊依赖)
添加外置tomcat依赖,移除嵌入式Tomcat,否则打出的war包启动时会报错,如下:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <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>
注意:tomcat-embed-jasper中scope必须是provided,因为SpringBootServletInitializer需要依赖 javax.servlet,而tomcat-embed-jasper下面的tomcat-embed-core中就有这个javax.servlet,如果没用provided,最终打好的war里面会有servlet-api这个jar,这样就会跟tomcat本身的冲突了
代码区别
创建的war工程会多一个文件,如下:
说明:SpringBootServletInitializer就是一个org.springframework.web.context.WebApplicationContext,容器启动时会调用其onStartup(ServletContext servletContext)方法,onStartup的核心方法就是createRootApplicationContext(servletContext),简单说就是通过SpringApplicationBuilder构建并封装SpringApplication对象,并最终调用SpringApplication的run方法的过程