美文网首页
替换jar的class文件

替换jar的class文件

作者: binecy | 来源:发表于2019-11-11 09:37 被阅读0次

在某些情况下,直接替换jar中的class文件,可以免去编译构建jar的时间,快速修改代码。
例如需要对测试环境代码做些小调整时,如修改某个变量,if条件等,可以在本地机器上修改代码,编译成class后上传到测试环境,直接替换jar中的class文件,重启应用就可以了,这样可以节约不少时间。

这时,我们需要使用jar命令。

替换class
例如,我们要替换jar中的HelloController.class

$ jar uvf web-start-1.0-SNAPSHOT.jar BOOT-INF/classes/com/binecy/controller/HelloController.class
正在添加: BOOT-INF/classes/com/binecy/controller/HelloController.class(输入 = 1664) (输出 = 839)(压缩了 49%)

注意:新的class文件必须放到jar中原class文件相同的目录下。如上面例子,原HelloController.class在jar中的BOOT-INF/classes/com/binecy/controller/目录下,所以新的HelloController.class也要放到BOOT-INF/classes/com/binecy/controller/(否则会新增一个class文件,而不能替换原class文件)。

参数解释:
u : 替换或添加文件
v : 生成详细的报造,并输出至标准设备
f : 指定jar包的文件名

修改配置
如果只是修改配置文件就更简单了,使用vim就可以了。
vim jar会列出jar中所有的文件,输入 / 可以通过文件名找到对应文件,回车就可以使用vim编辑该文件了(编译完成后使用w保持该文件)。


替换class时,可以用这个方法找出class的目录

手动打包
我们也可以先解压jar,手动替换class后重新打包jar,不过做法更繁琐,这里只做记录,不推荐使用。

1.解压
jar xvf web-start-1.0-SNAPSHOT.jar
参数解释:
x : 解压jar包

2.打包

jar cvf0m  web-start-1.0-SNAPSHOT.jar META-INF/MANIFEST.MF .

参数解释:
c : 创建一个jar包
m : 指定manifest.mf文件,上面例子中META-INF/MANIFEST.MF就是指定MANIFEST.MF,默认没有MANIFEST.MF文件,无法启动java进程。
0 : 创建jar包时不对其中的内容进行压缩处理,压缩内容可能导致如下错误

It has been compressed and nested jar files must be stored without compression. 
Please check the mechanism used to create your executable jar file

使用阿里的Arthas工具也可以替换jar中的class文件,这是后话了。

相关文章

  • 替换jar的class文件

    在某些情况下,直接替换jar中的class文件,可以免去编译构建jar的时间,快速修改代码。例如需要对测试环境代码...

  • Mac下生成Dex的Jar文件

    打包包含单个class文件的jar文件使用命令jar cvf output.jar origin.class注意:...

  • 杂谈,开发中遇见的那些奇葩事

    1. 第一次带徒弟的时候,给他要class文件,我替换到jar包里边,他把Eclipse中的java文件copy出...

  • 四、实战过程

    1、将java文件编译成class: 2、将class打成jar包 【jar -cvf *****.jar *.c...

  • java - 乱七八糟的问题?

    如何查看jar的class文件?

  • java常用命令行参数

    运行class文件执行带main方法的class文件,命令行为:java 运行jar文件中的...

  • Android Studio 打包jar,aar

    1.Jar &Aar jar包与aar包的区别 jar是java字节码文件(class文件)的归档文件,其不包含a...

  • linux环境jar替换class

    由于linux环境解压并不方便,而且受制于网络管控等因素,上传速度慢,故如果需要class进行替换. 准备 1.与...

  • Jar和arr的区别

    jar:只包含class文件与清单文件,不包含资源文件; arr:包含所有资源、class文件和res文件;

  • Package&Jar

    Jar包 Jar(Java Archive)包是将class文件归档压缩之后所展现的文件形式.以.jar为后缀 P...

网友评论

      本文标题:替换jar的class文件

      本文链接:https://www.haomeiwen.com/subject/fvolkctx.html