虽然现在已经有各种智能的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. openGLES(三)

    着色器语言 ​ 着色器语言基于c/c++语言,但是还是有区别的,它不是面向对象 数据类型概述 ​ 内建的数据类型:浮点型(float).布尔型(bool).整形(int),矩阵(matrix)以及向量 ...

  2. JS如何动态生成变量名[重点]

    解决方案: function create_variable(num){           var name = "test_"+num;   //生成函数名           ...

  3. 【河南省多校脸萌第六场 E】LLM找对象

    [链接]点击打开链接 [题意] 在这里写题意 [题解] 把n个时间离散化一下. 对于不是相邻的点,在两者之间再加一个空格就好. 这样最多会有1000个位置. 则定义dp[i][k][j] 表示前i个数 ...

  4. 使用Tomcat发布war包

    第一步:下载tomacat 1.下载地址:http://tomcat.apache.org 2.解压后目录如下 3.双击bin文件夹下startup.bat 即可启动tomcat, 计算机会弹出控制台 ...

  5. 【原创】面向对象版本地CPU资源占用监控脚本

    前期准备: 1.python2.7环境 2.相关第三方库下载安装 脚本工作过程: 1.根据输入的进程名判断进程是否存在,如果不存在则进行等待,直到检测到进程PID,中途进程退出抛出异常,键入enter ...

  6. 常用到的Linux命令

    记录一下日常用到的Linux命令,就当做日志了 1.查看Linux 端口号  netstat -apn | grep 80 2.杀死进程   kill -s 9 pid (tomcat 启动不起来有可 ...

  7. 原生js大总结一

    001.浅谈堆和栈的理解?   js变量存储有栈存储和堆存储,基本数据类型的变量存储在栈中,引用数据类型的变量存储在堆中 引用类型数据的地址也存在栈中   当访问基础类型变量时,直接从栈中取值.当访问 ...

  8. bootstrap课程4 bootstrap的css样式有哪些内容需要注意

    bootstrap课程4 bootstrap的css样式有哪些内容需要注意 一.总结 一句话总结: 1.如何选择产品(框架)的版本? 大版本下的最后一个版本,但是同时又要选择稳定的版本,也就是如果做产 ...

  9. 3、C++快速入门

    参考书籍: C++程序设计教程_第二版_钱能    //篇幅较少,适合快速学习 C++ Primer Plus  第六版  中文版   //篇幅较大,讲的非常详细 C++一般必须包含的头文件是#inc ...

  10. OC学习篇之---Foundation框架中的NSArray类和NSMutableArray类

    我们继续来看一下Foundation框架中的NSArray类和NSMutableArray类,其实NSArray类和Java中的List差不多,算是一种数据结构,当然我们从这两个类可以看到,NSArr ...