21CTO社区导读:在本篇文章,我们向您演示如何从WAR文件中提取源文件,并恢复用Java编写的Web项目结构的方法。
现在我们做一个假设,你是一个软件开发团队,现在客户的需求发生了变化。这可了不得了,而且你还不能再访问生产机上的应用程序源代码。
你要重新开始写吗?然后再考虑这些需求变更?也许可以不用。
这样的事情真的可以发生,以下是我和团队最近完成的逆向工程的实例。
面临的挑战
我们一直在用Java开发Web应用程序。此应用通过REST接口为提供PDF报表。使用了Spring做为核心应用程序框架,Spring MVC通过REST通过其它应用接受请求,从MySQL中取得数据生成PDF格式的报告。
客户希望使用该应用程序,还想再加上一些特性以增强实用性,但是没有源代码。现在只有Web应用程序包(WAR)可用,并且部署在了生产服务器上。因此,我们的工程师需要恢复Web应用程序的结构。
接下来我们就开始尝试有效地解决这个问题。
第一优先级:获取应用程序的源代码
首先,我们需要取得生产服务器WAR文件的目录和文件结构。我们重绘了Web应用程序的结构并将其恢复,以便下一步开发Web应用程序的框架。
接下来,我们将源代码和目录结构整合在一起,以便修改和改进并能运行该应用程序。
第二优先级:WAR逆向工程
有几个实用工具可以将Java字节码反编译为Java源代码。
给大家介绍以下几个工具:
Bytecode Viewer
https://github.com/konloch/bytecode-viewer
Java Decompiler
https://github.com/java-decompiler
Fernflower
https://github.com/fesh0r/fernflower
Procyon
https://bitbucket.org/mstrobel/procyon/src
为了解决以上任务,我们选择了Bytecode Viewer。这是一个免费的工具,它还提供了一个优秀GUI界面,使开发者能够专注于项目的结构。
Bytecode Viewer支持JAR格式做为输入文件。WAR和JAR本质上都是压缩格式的文件,因此,我们需要将.war 扩展名更改为.jar。
下面图片是我们逆向工程的输出结果。
第三优先级:恢复 Web应用程序结构
接下来,我们需要了掌握Web应用的目录结构。刚才我们已经重命名了WAR到jar扩展名。现在我们可以直接将它解压缩并查看它的结构。
目标结构如下:
我们看到,WAR文件包包含了pom.xml,可以把它复制粘贴到我们的项目里去。
根据Maven Web 项目结构,应该把所有位于WEB-INF/classes文件平中的配置文件放到src/main/resources目录中。图片,模板以及index.jsp放在src/main/webapp目录中;把WEB-INF目录下的web.xm放进src/main/java/webapp/WEB-INF中。
以上所以这些文件的重组均是基于Maven Web框架目录架构和Web归档包规则进行处理的。
为此,我们已经恢复了 WAR 的原始目录结构。如下所示:
第四优先级:把它们加在一起
现在,我们已经有了第一、第二阶段的源代码以及作为第三阶段恢复结果的Web项目结构。
所有获得的Java源代码将保存在src/main/java目录中。
该Web项目现在包含如下的文件与目录结构:
最后,该项目可以用 mvnclean install 命令进行打包。
最后成果
值得庆贺,我们的主要目录已经实现。我们把生产环境中运行的Web应用程序之源代码交给了客户。
因为有源程序,要改进和解决问题就容易多了,接下来就可以为客户维护和定制Web应用程序。
在这个例子,我们给大家演示了如何从Java WAR包文件中提了源代码并恢复Web项目文件和结构的方法。
我希望您永远不会遇到这样的情况。但是,如果发生了这种情况也不用着急,希望本篇文章会对您有用! :)
作者:老王
编辑:21CTO社区花花
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/257312.html