2 Star 1 Fork 0

zhrun8899 / learning-notes

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
springboot-打包为war包.md 2.84 KB
一键复制 编辑 原始数据 按行查看 历史

1.需要一个类实现web.xml功能

如果我们想要将这个JAR包转换成可以在Servlet容器中部署的WAR的话,就不能依赖于Application的main函数了,而是要以类似于web.xml文件配置的方式来启动Spring应用上下文,此时我们需要声明这样一个类:

Hellowebxml 代码 收藏代码

public class HelloWebXml extends SpringBootServletInitializer {  
​    @Override  
​    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {  
​        return application.sources(Application.class);  
​    }  

}  

这个类的作用与在web.xml中配置负责初始化Spring应用上下文的监听器作用类似,只不过在这里不需要编写额外的XML文件了。

或者修改application.java,应该采用这种方法,简洁有力

@SpringBootApplication
public class Application extends SpringBootServletInitializer{
​	@Override
​	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
​		return builder.sources(Application.class);
​	}


	public static void main(String[] args) {
		SpringApplication.run(Application.class, args);
	}
}

2.对依赖进行更改

如果要将最终的打包形式改为WAR的话,还需要对pom.xml文件进行修改,除了需要将packaging的值修改为war以外,还需要对依赖进行适当的配置(这一部分在Spring Boot的样例和文档中均未提及,提醒大家注意):

2.1 去除对tomcat依赖

Pom.xml代码

​ org.springframework.boot ​ spring-boot-starter-web ​ ​ ​ org.springframework.boot ​ spring-boot-starter-tomcat ​ ​

在这里需要移除对嵌入式Tomcat的依赖,这样打出的WAR包中,在lib目录下才不会包含Tomcat相关的JAR包,否则将会出现启动错误。

2.2 增加serverlet依赖

另外,在移除对Tomcat的依赖后,为了保证编译正确,还需要添加对servlet-api的依赖,因此添加如下的配置:

Pom.xml代码

​ org.springframework.boot ​ spring-boot-starter-tomcat ​ provided

在这里将scope属性设置为provided,这样在最终形成的WAR中不会包含这个JAR包,因为Tomcat或Jetty等服务器在运行时将 会提供相关的API类。此时,执行mvn package命令就会得到一个WAR文件,我们可以直接将其放到Tomcat下运行(需要7.0.42版本以上)。

3.修改pom文件中打包方式

war

1
https://gitee.com/zhrun8899/learning-notes.git
git@gitee.com:zhrun8899/learning-notes.git
zhrun8899
learning-notes
learning-notes
master

搜索帮助