当前位置:网站首页>Make Jar, Not War
Make Jar, Not War
2022-07-05 20:31:00 【小盒子】
大约在 4 年前,关于 java 应用最终打成 jar 包还是 war 包的选择令我比较疑惑。
那时候更多的应用是打成 war 包的,即使我们知道可以打成 jar 包,但之前都是打成 war 包,并且好像打成 jar 包并没有什么特别明显的好处。
但当时令我困惑的是越来越多的实践正在不怎么说明理由的情况下转而打 jar 包,于是我开始思考......
war 包的理由
在某大型 OTA 企业内部,应用仍然打成 war 包, PaaS 平台会自动安装并配置好 tomcat,我知道这对于 web server 的统一配置和运维来说是有好处的。 基于 war 背后的一系列 CI/CD 、DevOps 流程都一定有相应的适配,且就算 jar 包有我不知道的某些优势也不可能一夜之间在大型企业内部使用,需要平台和系统做出调整。
SpringBoot 在当时并未像现在这样流行,这并不意味着大家不用它,我的意思是相对新的项目来说,企业内部会有非常多 “老系统” 需要维护,我们不能指望一下子把这些老系统都用新的技术栈替换掉,就像你知道现在 web application 一般是前后端分离开发,但如果接手一个使用 jsp 的老家伙,你还得维护不是?
jar 的时代
时代不同了,说得好像过了几十年的样子,但其实也就几年光阴而已。不过仅仅是这几年的光阴却足以改变一些事情的面貌。
如今,云原生、微服务大行其道,大家好像已经非常适应这种开发模式,没有人纠结要不要用 SpringBoot,只会讨论使用的版本高还是低。更不用说打包的事情,很自然的会使用 jar,虽然这种看起来的 “最佳实践”,在长期开发的过程中会形成 “肌肉记忆”,但我们还是要讨论一下为什么。
方便
可运行 Jar 是打包自包含可运行应用程序的便捷方法。这样,我们可以最大限度地减少依赖关系。可以通过 Spring boot Maven 和 Gradle plugin 来管理依赖。
云原生友好
在自备容器的情况下(docker,k8s), jar 包可以直接作为一个 single application 来管理。
在过去我们使用 war 是为了让多应用共享 web server,现在是容器的天下,在容器内,一般情况只跑一个应用进程。由于只有一个进程,我们就可以轻松地管理它,比如重启(不会影响其他的应用,因为没有其他应用)。
版本控制
利用 git 等版本控制软件,可以控制程序运行所需要的一切(比如配置文件)
易于扩展
例如,将其复制到另一台服务器,然后“ just run it!” 无需安装和/或配置容器
参考
https://medium.com/@satyajit.nalavade/make-jar-not-war-josh-long-d6ce5fbb8a23
边栏推荐
- Rainbond 5.7.1 支持对接多家公有云和集群异常报警
- Scala基础【HelloWorld代码解析,变量和标识符】
- B站UP搭建世界首个纯红石神经网络、基于深度学习动作识别的色情检测、陈天奇《机器学编译MLC》课程进展、AI前沿论文 | ShowMeAI资讯日报 #07.05
- 2020 CCPC 威海 - A. Golden Spirit(思维),D. ABC Conjecture(大数分解 / 思维)
- Schema and model
- Oracle-表空间管理
- Leetcode(347)——前 K 个高频元素
- IC科普文:ECO的那些事儿
- 信息学奥赛一本通 1339:【例3-4】求后序遍历 | 洛谷 P1827 [USACO3.4] 美国血统 American Heritage
- 【数字IC验证快速入门】9、Verilog RTL设计必会的有限状态机(FSM)
猜你喜欢

Hong Kong stocks will welcome the "best ten yuan store". Can famous creative products break through through the IPO?

National Eye Care Education Conference, 2022 the Fourth Beijing International Youth eye health industry exhibition

Classic implementation of the basic method of intelligent home of Internet of things

- Oui. Net Distributed Transaction and Landing Solution

Leetcode: binary tree 15 (find the value in the lower left corner of the tree)

2022 Beijing eye health products exhibition, eye care products exhibition, China eye Expo held in November

Scala基础【HelloWorld代码解析,变量和标识符】

Applet page navigation

欢迎来战,赢取丰厚奖金:Code Golf 代码高尔夫挑战赛正式启动

Hongmeng OS' fourth learning
随机推荐
[quick start of Digital IC Verification] 3. Introduction to the whole process of Digital IC Design
Leetcode(347)——前 K 个高频元素
Is it safe for CICC fortune to open an account online?
Scala basics [HelloWorld code parsing, variables and identifiers]
Practical demonstration: how can the production research team efficiently build the requirements workflow?
2.8 basic knowledge of project management process
【数字IC验证快速入门】7、验证岗位中必备的数字电路基础知识(含常见面试题)
欢迎来战,赢取丰厚奖金:Code Golf 代码高尔夫挑战赛正式启动
计算lnx的一种方式
[C language] merge sort
3.3 project evaluation
Leetcode brush questions: binary tree 18 (largest binary tree)
- Oui. Net Distributed Transaction and Landing Solution
Simple understanding of interpolation search
信息学奥赛一本通 1340:【例3-5】扩展二叉树
信息学奥赛一本通 1338:【例3-3】医院设置 | 洛谷 P1364 医院设置
. Net distributed transaction and landing solution
Informatics Olympiad 1338: [example 3-3] hospital setting | Luogu p1364 hospital setting
ROS2专题【01】:win10上安装ROS2
What is PyC file
