虽然现在已经有各种智能的IDE可以为我们生成jar包,war包,ear包,甚至带上了自动替换,部署的功能。但一定会有那么些时候,你需要修改或是替换jar包,war包,ear包中的某个文件而不是整个重新生成。比如说,你有一个ear包已经部署到客户的服务器上,运行了有那么久了,版本也很老,但一个让你头痛的bug需要立即在客户那里fix,这个ear包很大,并且客户的网络很慢,你也没有那么老的整套代码,但是你明白只需要改一个class文件就可以修复了。如果你按照正常的流程,那一般是你得提交代码,由CI编出一个rpm包,在客户的服务器上重新部署,再验证,这时候黄花菜都凉了,客户心里已经骂了你无数遍的无能。

那这时候,我们只有让热替换出场了(我之前写过一篇文章是关于热部署的,但那是通过JDK自带的功能,这里要说的是硬生生的替换文件),很庆幸,现在所有的Java应用程序服务器都支持热部署。所以我们只需要进入到应用程序服务器的路径,把我们修改了bug的class文件或jar文件,whatever else,替换到ear包里面就可以了。这时应用服务器就会检查到ear包发生了更新,会自动热部署。

这里要用到工具是两个,jar和7z,为什么jar和7z或者zip被一起相提并论,因为jar包,war包,ear包,本质上都是zip包或称为压缩包

jar command

这是JDK自带的工具。有的放矢,只需知道以下四大命令外加vf后缀:

命令 解释
c 创建一个新的压缩包
t 列出压缩包中的所有内容
x 将指定文件或者整个压缩包解压到当前目录
u 将当前压缩包更新
v 将你触发的所有的动作都打印到标准输出
f 可以指定压缩包的名字

注意: 这里的压缩包可以是jar, war, ear或者what ever else,你只需在调用jar的时候,指定你要的后缀名。

然后,接下来的例子,你都是用 jar -cvf或jar -xvf或jar -uvf

创建压缩包:

这个不是我们的重点,只是给大家表述一下jar -cvf的本质是压缩包,而且是啥后缀名都行。假设有如下文件:

调用jar -cvf bb.cc *, 将文件夹下所有文件压缩到文件bb.cc中,你也可以是bb.jar, bb.war, bb.ear

用7z或者zip打开:

表明这是一个简单的压缩包,只是多了一个META-INFO文件夹而已。无他

替换jar, war, ear包中的文件:

这是我们的重点,主要用到的是一个命令组合, jar -tvf + jar -xvf + jar -uvf。

发挥一下想象力,这个example.ear是部署在服务器上的,编译和部署的流程很复杂,你不想重新编译和部署这个exmple.ear只想替换里面的文件。

先用jar -tvf看一下文件里面有啥,假设我们要替换里面EjbComponent.jar

这个jar很小,50k, 我们修改一下这个文件,放到同一个目录:

执行一下jar -uvf example.ear EjbComponent.jar,我们可以看到新的EjbComponent.jar被替换到了ear包中

这时再发挥一下想象力,这个ear是在应用服务器的deployment目录中,hot deploy是打开的,服务器会发现这个ear包的创建时间更新了,会重新部署这个ear包

注意:上面的例子中,ear包的目录结构是很简单的,所有的文件基本都在根目录,如果你要替换子目录中的文件,那你需要先执行jar
-xvf命令,把你需要替换的文件先解压缩出来(会连带目录结构一起解压到当前目录),然后再将新文件替换解压之后的目录结构中的文件,再执行jar
-uvf。(如有不懂,评论里面问)

修改jar, war, ear包中的文件:

如果是修改,那证明基本上你要修改的不可能是class文件或jar文件,一定是什么xml,properties等被打包在压缩包中的文件,这时就用7z出马了,直接打开压缩,编辑,即可:

编辑之后保存,

删除jar, war, ear包中的文件:

简单啊,7z打开,直接删除

jar命令+7z:创建,替换,修改,删除Jar, war, ear包中的文件的更多相关文章

  1. IDEA修改jar包中class文件后重新生成jar包

    一.背景 最新想要修改rebeyond大佬的冰蝎项目,特地去网上搜索如何修改jar包中的源码再替换回去的方法,但由于现在的一些文章写的太烂,导致走了很多弯路,因此写下这篇快速使用IDEA修改源码并替换 ...

  2. 使用命令动态更新JAR包中的文件

    动态更新JAR包中的文件,经本人实际测试可正常执行! 一.查询jar包中要替换的文件位置 jar  -tvf  gateway.jar  |  grep  topjui.config.js 二.在当前 ...

  3. JAR WAR EAR包的区别

    jar包和war包的区别: war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块.而jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令 ...

  4. (转载)ORA-14452:试图创建,更改或删除正在使用的临时表中的索引

    因为表kol_xx_fin050_temp 为临时表,而且有其他session正在使用. 处理步骤: 1.先从 dba_objects / user_objects中查询到该表的object_id: ...

  5. ORA-14452: 试图创建, 更改或删除正在使用的临时表中的索引

    ORA-14452: 试图创建, 更改或删除正在使用的临时表中的索引       因为表KOL_XX_FIN050_TEMP 为临时表,而且有其他session正在使用. 处理步骤: 1.先从 dba ...

  6. java打包jar,war,ear包的作用、区别

    java的打包jar,war,ear包的作用,区别,打包方式. a) 作用与区别      i.    jar: 通常是开发时要引用通用(JAVA)类,打成包便于存放管理      ii.   war ...

  7. java读取jar包中的文件

    随手写了一个java小工具,maven打包成功后,发现工具总是读不到打在jar包中的文件信息,要读取的文件位于 /src/main/resources 目录下,打包成功后,文件就在jar包中根目录下, ...

  8. 在swt中获取jar包中的文件 uri is not hierarchical

    uri is not hierarchical 学习了:http://blog.csdn.net/zdsdiablo/article/details/1519719 在swt中获取jar包中的文件: ...

  9. Linux下用jar命令替换war包中的文件【转】

    问题背景:在Linux环境上的weblogic发布war包,有时候只是修改了几个文件,也要上传整个war包,这样很费时间,因此整理了一下Linux环境,更新单个文件的方法. 1.如果要替换的文件直接在 ...

随机推荐

  1. 前端面试题(JavaScript)

    (前端面试题大全,持续更新) 箭头函数特点?箭头函数和普通函数的区别 手写懒加载(考虑防抖和重复加载问题) 手写bind(为什么要加预参数,为什么要加new) apply, call, bind ne ...

  2. 理解OAuth 2.0 - 阮一峰的网络日志

    原文:理解OAuth 2.0 - 阮一峰的网络日志 理解OAuth 2.0 作者: 阮一峰 日期: 2014年5月12日 OAuth是一个关于授权(authorization)的开放网络标准,在全世界 ...

  3. .net core 修改网站启动端口

    原文:.net core 修改网站启动端口 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/yenange/article/details/81675 ...

  4. 【习题 6-4 UVA-439】Knight Moves

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] bfs模板题 [代码] /* 1.Shoud it use long long ? 2.Have you ever test sev ...

  5. solrcloud集群搭建

    solrcloud 集群搭建 初始条件: 1. 三台服务器 IP 地址分别为 192.168.1.133 192.168.1.134 192.168.1.135 2. 使用 solr-5.3.1,zo ...

  6. python中数据结构

    列表:数组,矩阵 元组 映射:字典 集合

  7. Docker---(2)docker pull 下来的镜像存储在哪里

    原文:Docker---(2)docker pull 下来的镜像存储在哪里 版权声明:欢迎转载,请标明出处,如有问题,欢迎指正!谢谢!微信:w1186355422 https://blog.csdn. ...

  8. OC学习篇之---文件的操作

    今天我们来介绍OC中文件操作,在之前的文章中,已经接触到了文件的创建了,但是那不是很具体和详细,这篇文章我们就来仔细看一下OC中是如何操作文件的: 第一.首先来看一下本身NSString类给我们提供了 ...

  9. 【SPOJ 694】Distinct Substrings (更直接的求法)

    [链接]h在这里写链接 [题意] 接上一篇文章 [题解] 一个字符串所有不同的子串的个数=∑(len-sa[i]-height[i]) [错的次数] 0 [反思] 在这了写反思 [代码] #inclu ...

  10. ANDROID内存优化(大汇总——全)

    写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上把网上搜集的各种内存零散知识点进行汇总.挑选.简化后整理而成. 所以我将本文定义为一个工具类的文章,如果你在A ...