使用JD-GUI编译jar中的class文件,重新打包发布
下载JD-GUI
下载安装JD-GUI:http://java-decompiler.github.io/
启动app踩坑
报错原因:app启动脚本不符合当前操作系统的指令规范,详情如下:
如果你的电脑是mac的高版本可能会遇到如下bug:
ERROR launching 'JD-GUI'
No suitable Java version found on your system!
This program requires Java 1.8+
Make sure you install the required Java version.
上述问题是由于当 JD-GUI 执行启动脚本universalJavaApplicationStub.sh过程中,需要确定要使用的 Java 版本信息来安装。在启动脚本调用操作系统API执行如下指令:
/usr/libexec/java_home -F -v 1.8+
查找jdk版本信息的时候,系统返回会报错:这是由于这个指令不符合当前操作系统的指令规范。
我们需要替换或者修改 JD-GUI 程序里的启动脚本解决上述问题,参考步骤如下:
-
先将下载下来的
jd-gui-osx-1.6.6.tar
解压,然后将JD-GUI.app
文件拷贝到Applications
目录下 -
右键点击app:改动
Contents/MacOS/universalJavaApplicationStub.sh
文件
-
改动universalJavaApplicationStub.sh文件:改动后的代码后如下:
/usr/libexec/java_home -F -v ${JVMVersion}
直接通过获取的操作系统的jdk版本的环境变量,执行脚本解决问题,具体操作如下:将
Contents/MacOS/universalJavaApplicationStub.sh
文件的内容替换为 https://github.com/tofi86/universalJavaApplicationStub/blob/v3.2.0/src/universalJavaApplicationStub 中的内容然后保存,重新启动app。
反编译JAR
-
打开jar包文件,或者解压文件:
jar xf test.jar
-
指定.class文件使用command/control + s保存文件成.java文件
-
修改.java文件,然后使用javac指令编译.java文件成.class文件
javac test.java
-
使用jar命令将jar包中的.class文件替换成指定的class文件
jar -uf demo-api-1.1.0.jar org/springframework/boot/loader/util/test.class