Jar命令+7z:创建,替换,修改,删除Jar, war, ear包中的文件

原创 2016年06月14日 11:21:46

虽然现在已经有各种智能的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命令替换jar中的一个或多个文件

此过程用于jenkins自动部署中替换jar包的配置文件 jar -uvf rpds.jar BOOT-INF/classes/db.properties PS:BOOT/classes是jar包...
  • ab7253957
  • ab7253957
  • 2017年09月05日 12:43
  • 550

linux下的jar命令

制作可执行的JAR文件包及jar命令详解    常常在网上看到有人询问:如何把 java 程序编译成 .exe 文件。通常回答只有两种,一种是制作一个可执行的 JAR 文件包,然后就可以像.chm ...
  • jiubugeinifo
  • jiubugeinifo
  • 2014年05月14日 16:49
  • 17583

总结替换jar包中指定文件的步骤

一: 1定位路径:cd /bestpayserver/project/paycenter-bank 2列出指定文件路径:jar tvf paycenter-bank.jar|grep BocB2b...
  • qq_16485855
  • qq_16485855
  • 2016年06月12日 13:33
  • 2124

修改jar包中的配置文件

使用unzip修改1、解包至当前目录tmp子目录下
  • young_kim1
  • young_kim1
  • 2016年01月08日 13:50
  • 5412

怎样更新jar包中的某个class文件??

很简单呀~~ jar   -cvf   aaa.jar   test\ttt.class 就可以了。 aaa.jar       |_____test       |       ...
  • studyvcmfc
  • studyvcmfc
  • 2012年07月13日 22:20
  • 12804

替换jar包指定的文件

替换jar 包下面的class 文件,很多人会想到直接用winrar 打开替换,在一般的情况下, 是可行的,但是如果说这个jar 的代码经过混淆后,会有大小写不同,文件名是相同的,在windos...
  • giianhui
  • giianhui
  • 2013年08月19日 21:03
  • 16837

直接修改别人jar包里面的class文件 工具:jclasslib

出于某些原因 需要把别人jar包里面的class修改一下信息 配置文件*.properties MANIFEST.MF 这些东西可以直接用记事本打开修改 然后替换掉就OK.. 在网上游荡了半...
  • hexin373
  • hexin373
  • 2011年08月08日 16:50
  • 108642

shell 删除jar包中的文件或文件夹

shell 删除jar包中的文件或文件夹如何使用shell脚本来删除jar包中的文件或文件夹呢,有同学会遇到这样的需求,把jar包中的配置文件删除或者修改文件,但又不能破坏jar包的格式,文本介绍使用...
  • dounine
  • dounine
  • 2017年04月12日 09:53
  • 6681

linux 删除jar包中指定类型文件

linux 删除jar包中指定类型文件1.上传文件 2.解压当前jar文件[root@jxjy-v30-test4 train]# jar -xvf 51basic-1.0-SNAPSHOT.jar...
  • csdn565973850
  • csdn565973850
  • 2017年12月20日 19:30
  • 163

jar, apk, zip 删除命令

删除jar包中的文件夹 zip --delete baseproject.jar "com/luajava/*"
  • JavaLive09
  • JavaLive09
  • 2016年11月29日 15:10
  • 503
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Jar命令+7z:创建,替换,修改,删除Jar, war, ear包中的文件
举报原因:
原因补充:

(最多只允许输入30个字)