当前位置: 首页 > news >正文

Jar包和War包的区别以及如何选择

🤟致敬读者

  • 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉

📘博主相关

  • 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息

文章目录

  • Java打包-Jar和War两种方式的区别与选择
    • 1. 小作文
    • 2. 正文内容
      • 2.1 核心要点
      • 2.2 详细对比
      • 2.3 内部结构图示
        • JAR包结构示例(一个简单的工具库)
        • WAR包结构示例(一个标准的Web应用)
      • 2.4 现代开发中的演进(非常重要!)
      • 2.5 总结与如何选择


📃文章前言

  • 🔷文章均为学习工作中整理的笔记。
  • 🔶如有错误请指正,共同学习进步。


在这里插入图片描述


Java打包-Jar和War两种方式的区别与选择

1. 小作文

不知道多久没有创建新的Java项目了,在重装系统后,安装了最新的开发工具(新版的JDK和新版的IDEA以及新版的Maven),创建了一个Java的springboot项目。
如下:

在这里插入图片描述
在红框位置,我迟疑了一下,这两个我该选哪个,默认是Jar,直觉告诉我应该默认就行了,但理性让我想知道另一个可不可以选,两者到底有什么区别。
似乎很久之前就学习过这两个东西,只是过了太久,记忆已经模糊了。

今天我们就来好好了解一下他俩的区别,以及在什么场景下该选择哪种打包方式。


2. 正文内容

2.1 核心要点

  • JAR包:Java ARchive,是Java的通用打包格式。它就像是一个压缩文件,将多个Java类文件、资源文件和相关元数据打包成一个文件。主要用于封装库、组件或独立应用程序
  • WAR包:Web Application ARchive,是专门为Web应用程序设计的打包格式。它也是一个压缩文件,但内部结构遵循特定的Java Web应用标准,用于部署到Servlet容器(如Tomcat、Jetty)或Web服务器。

2.2 详细对比

特性JAR包WAR包
全称Java ARchiveWeb Application ARchive
用途打包类库、工具或独立应用(如Swing应用、Spring Boot应用)。打包动态Web应用(如基于Servlet/JSP的网站)。
运行环境JVM。可执行JAR通过 java -jar 命令直接运行。Servlet容器/Web服务器(如Tomcat, Jetty, WebLogic)。
内部结构相对自由,但通常包含:
  • .class 文件
  • 资源文件(如.properties
  • META-INF/MANIFEST.MF(清单文件) | 有严格的目录结构(遵循Servlet规范):
  • /WEB-INF/web.xml (部署描述符,可选的)
  • /WEB-INF/classes/ (存放编译后的.class文件)
  • /WEB-INF/lib/ (存放应用依赖的JAR包)
  • 静态资源(如.html, .jsp, .css, 图片,位于根目录或其它目录) |
    | 打包工具 | JDK自带的 jar 命令,或Maven/Gradle等构建工具。 | Maven/Gradle等构建工具(通过配置打包类型为war)。 |
    | 可执行性 | 可以。通过配置MANIFEST.MF文件中的Main-Class属性,可以创建可执行的JAR。 | 不可以。WAR包本身不能直接运行,必须部署到Servlet容器中,由容器来加载和执行。 |
    | 依赖管理 | 通常不包含其依赖的第三方库。需要用户自行将依赖库添加到类路径(Classpath)中。 | 包含其依赖的第三方库,这些库都放在 /WEB-INF/lib/ 目录下,容器会自动加载。 |
    | 比喻 | 一个工具箱或一个独立的可执行程序。 | 一个家具齐全的样板间,需要放到一栋大楼(Servlet容器) 里才能使用。 |

2.3 内部结构图示

JAR包结构示例(一个简单的工具库)
my-app.jar
│
├── com/
│   └── example/
│       └── util/
│           ├── StringUtils.class
│           └── DateUtils.class
├── application.properties
└── META-INF/└── MANIFEST.MF  (指定版本、主类等信息)
WAR包结构示例(一个标准的Web应用)
my-webapp.war
│
├── index.html
├── login.jsp
├── css/
│   └── style.css
├── images/
│   └── logo.png
└── WEB-INF/├── web.xml        (Servlet、Filter等配置)├── classes/│   └── com/│       └── example/│           └── controller/│               └── LoginServlet.class└── lib/├── spring-webmvc-5.x.x.jar├── jdbc-driver.jar└── ... (其他依赖JAR)

2.4 现代开发中的演进(非常重要!)

随着Spring Boot等现代框架的兴起,传统的JAR/WAR界限变得有些模糊。

  1. Spring Boot的可执行JAR
    Spring Boot创造性地将传统的WAR包概念融入了JAR包中。它创建了一种可执行的、内嵌了Servlet容器(如Tomcat)的JAR包

    • 结构:这种JAR包内部不再是简单的类文件,而是包含:
      • BOOT-INF/classes/:存放你自己的应用代码。
      • BOOT-INF/lib/:存放你应用的所有依赖(包括内嵌的Tomcat!)。
      • org/springframework/boot/loader/:Spring Boot的类加载器,用于从这个特殊的JAR结构中加载类和资源。
    • 运行方式:你仍然使用 java -jar my-springboot-app.jar 来运行它。它会自动启动内嵌的Tomcat并部署你的应用。
    • 优势:实现了应用的独立和自包含,简化了部署流程,非常适合微服务和云原生架构。
  2. WAR包的持续存在
    虽然可执行JAR很流行,但WAR包在传统企业环境中依然重要。当你需要将应用部署到已有的、由运维团队管理的Tomcat、WebLogic或WebSphere集群时,打包成WAR仍然是标准做法。

2.5 总结与如何选择

场景应选择的包类型
开发一个工具库公共组件,供其他Java项目使用。JAR
开发一个传统的、基于Servlet/JSP的Web应用,并部署到独立的Tomcat等服务器。WAR
开发一个Spring Boot应用,并且希望它独立运行(使用内嵌服务器)。可执行JAR (Spring Boot默认)
开发一个Spring Boot应用,但需要部署到已有的、外部的Tomcat/JBossWAR (需要将Spring Boot的打包方式改为war,并排除内嵌容器)

简单来说:

  • 想做或者独立运行的桌面/命令行应用 -> JAR
  • 想做传统Web应用 -> WAR
  • 想做现代Spring Boot微服务(自带服务器) -> 可执行JAR
  • 想做现代Spring Boot应用(部署到外部服务器) -> WAR

在这里插入图片描述


📜文末寄语

  • 🟠关注我,解锁更多优质内容
  • 🟡技术前沿 | 实战干货 | 疑难解答,持续更新中
  • 🟢加入《全栈知识库》,与各领域开发者共创技术盛宴
  • 🔵​进入《专属社群》,技术路上结伴同行,共同成长
  • 🟣点击下方名片,获取更多精彩内容👇

http://www.dtcms.com/a/488257.html

相关文章:

  • 杭州网站模板还有什么网站可以做面包车拉货
  • 静态网站结构如何更新中国建设银行陕西省分行网站
  • 深圳品牌网站设计公司价格防内涵吧网站源码
  • 网站申请备案保定建设厅网站
  • 企业网站seo关键词优化排名思路用php做网站
  • 做网站一般用什么 语言wordpress添加文字alt
  • 电子相册在线制作网站wordpress好看分页
  • 多源信息融合+经典卷积网络故障诊断模型合集
  • 视频类网站开发经验资源网站源码下载
  • 大庆市网站建设公司su搜索引擎优化
  • 怎么做网站广告卖钱怎么改wordpress的html
  • wordpress页面和自定义链接叶涛网站推广优化
  • 泰州网站制作费用如何建立外贸网站
  • TIA Portal中运动控制(一)(功能块MC_Power...)
  • c网站开发视频教程龙岩网页
  • 主流大模型快速应用分析
  • 网站数据库怎么建多种语言网站怎么做
  • 出境旅游业务流程
  • 实战针对本地项目git如何移除旧仓库关联并且添加关联新仓库-优雅草卓伊凡
  • 教育网站怎么做引导栏的互动科技 网站建设
  • 在yolo中什么是先验框
  • 遥感卫星升轨 / 降轨技术解析:对图像光照、对比度的影响及工程化应用
  • 企业网站和信息化建设金蝶wordpress绑定多郁闷
  • 怎样做网站的背景图片做搬家广告哪家网站有优
  • 开源安全管理平台wazuh-非法可疑进程检测
  • 做佣金单网站盐田高端网站建设
  • ppt免费制作网站wordpress的中文插件
  • 电脑操作全记录:一键监控键盘鼠标U盘
  • 青岛网站制作seo中国建设银行属于什么类型网站
  • 个人网站建设咨询电话九脉堂是做网站的