写点什么

jar 包与 war 包的部署

作者:你?
  • 2022 年 1 月 21 日
  • 本文字数:1612 字

    阅读完需:约 5 分钟

jar包与war包的部署

前言

Spring Boot 支持传统部署和更现代的部署形式。jar 跟 war 都支持,这里参考springboot参考手册学习记录


传统部署:https://docs.spring.io/spring-boot/docs/2.1.6.RELEASE/reference/html/howto-traditional-deployment.html


更现代的部署:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#getting-started-first-application-executable-jar

jar 和 war 包的区别

jar 包和 war 包都可以看成压缩文件,都可以用解压软件打开,jar 包和 war 包都是为了项目的部署和发布,通常在打包部署的时候,会在里面加上部署的相关信息。这个打包实际上就是把代码和依赖的东西压缩在一起,变成后缀名为.jar 和.war 的文件,就是我们说的 jar 包和 war 包。但是这个压缩包可以被编译器直接使用,把 war 包放在 tomcat 目录的 webapp 下,tomcat 服务器在启动的时候可以直接使用这个 war 包。通常 tomcat 的做法是解压,编译里面的代码,所以当文件很多的时候,tomcat 的启动会很慢。


jar 包和 war 包的区别:jar 包是 java 打的包,war 包可以理解为 javaweb 打的包,这样会比较好记。jar 包中只是用 java 来写的项目打包来的,里面只有编译后的 class 和一些部署文件。而 war 包里面的东西就全了,包括写的代码编译成的 class 文件,依赖的包,配置文件,所有的网站页面,包括 html,jsp 等等。一个 war 包可以理解为是一个 web 项目,里面是项目的所有东西。

两种方式

jar

springboot 项目支持创建可执行 Jar,参考手册第11.5. Creating an Executable Jar就有对这样的介绍。


如果需要打 jar 包直接进入 idea 之后使用 maven 然后进行 package 直接进行 jar 包创建

war

​ 参考手册第92.1 Create a Deployable War File就有对这样的介绍:


​ 由于 Spring WebFlux 并不严格依赖于 Servlet API,并且应用程序默认部署在嵌入式反应器 Netty 服务器上,所以 WebFlux 应用程序不支持 War 部署。


生成可部署 war 文件的第一步是提供 SpringBootServletInitializer 子类并覆盖其配置方法。这样做可以利用 Spring Framework 的 Servlet 3.0 支持,让您在 Servlet 容器启动应用程序时配置它。通常,您应该更新应用程序的主类以扩展 SpringBootServletInitializer,同时,要将 Spring 应用程序部署到外部服务器,必须确保 servlet 初始化器直接实现 WebApplicationInitializer(即使是从已经实现它的基类扩展而来)。如下例所示:


@SpringBootApplicationpublic class MyspringbootApplication  extends SpringBootServletInitializer implements WebApplicationInitializer {
@Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(MyspringbootApplication.class); }
public static void main(String[] args) { SpringApplication.run(MyspringbootApplication.class, args); }}
复制代码


在创建 springboot 项目时,默认是 jar 包,如果是想要打成 war 包,需要修改 pom.xml,打包方式跟生成路径跟 jar 的一样,过程的最后一步是确保嵌入的 servlet 容器不会干扰部署 war 文件的 servlet 容器。为此,需要将嵌入式 servlet 容器依赖项标记为所提供的。


<!--默认jar--><packaging>war</packaging>
<!-- 如需打成war包 确保嵌入的servlet容器不会干扰部署war文件的servlet容器 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope></dependency>
<!--构建工具--><build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins></build>
复制代码


得到 war 包后把它丢到服务容器里(放在 webapps 文件夹下)run 起来就行了,要注意的是使用了外部容器,记得改 Tomcat 的端口,在 server.xml 的 Connector 节点

最后

推荐直接使用 jar 的方式运行。

发布于: 刚刚阅读数: 2
用户头像

你?

关注

还未添加个人签名 2021.03.16 加入

还未添加个人简介

评论

发布
暂无评论
jar包与war包的部署