如何从WAR文件中提取Java源代码?已尝试多种方法未果
从WAR文件提取Java源代码的可行方法
一、先解压WAR文件获取编译后的class文件
WAR本质是ZIP格式的压缩包,直接解压就能拿到里面的内容:
- 命令行方式:用JDK自带的
jar命令:jar xvf your-project.war,或者用unzip命令:unzip your-project.war - 图形化工具:用WinRAR、7-Zip等解压软件直接打开并提取文件
解压后重点关注WEB-INF/classes目录(存放项目自身的class文件)和WEB-INF/lib目录(依赖的第三方jar包,里面也包含class文件)。
二、反编译class文件得到Java源码
WAR文件本身不会包含原始Java源代码,你之前提取后没发现有价值内容,是因为拿到的是编译后的class文件,需要用反编译工具转换为可读的Java代码。常用工具:
- JD-GUI:图形化工具,操作简单。打开工具后直接拖拽class文件、
classes目录或者jar包进去,就能实时查看反编译后的代码,还能一键导出源码到本地目录。 - Fernflower:IntelliJ IDEA、Android Studio等IDE内置的反编译器。把解压后的
classes目录或lib里的jar包添加到项目依赖中,IDE会自动对class文件进行反编译,点击class文件就能查看源码。也可以单独下载命令行版本运行,执行类似java -jar fernflower.jar input-dir output-dir的命令批量反编译。 - Procyon:命令行反编译工具,支持批量处理。运行命令:
java -jar procyon-decompiler.jar -o 输出目录 目标class文件/目录/jar包,生成的源码可读性较高。
注意事项
- 反编译后的源码和原始代码会有差异:注释会丢失、泛型信息因擦除无法完全还原、Lambda等语法糖会被展开为匿名内部类,但核心业务逻辑可以完整还原。
- 如果class文件经过代码混淆处理,反编译后的代码会出现大量无意义的变量名、方法名,可读性极差,甚至部分代码无法正常反编译。
- 若WAR文件仅包含静态资源(HTML、CSS、JS等),本身没有class文件,那无法提取到Java源代码。
内容的提问来源于stack exchange,提问作者Dadmin
相关产品推荐
相关产品推荐

