【转】Java开源项目源码阅读方法及二次开发方法

一直以来,都想要阅读某些Java开源项目的源代码,甚至想要修改某些代码,实现对开源项目进行二次开发的目的。但老是不知从何入手,直接将开源项目的源代码导入Eclipse,老是会报不少错误,而没法编译。能够直接经过Eclipse打开开源项目的源代码,至少可以达到可视化源码阅读、源码导航的目的,仍是能在必定程度上解决源码阅读不爽的问题,由于直接打开并无改变源文件项目的目录结果,对于修改事后的代码,能够经过命令行找到源文件项目目录,并使用mvn或者ant对项目进行编译,再查看修改后的项目是否正确。html


因为当前Java开源项目几乎都是采用maven或者ant的方式打包的,因此上述方法再必定程度上解决了阅读源码的问题,至少经过Eclipse可以实现源码之间的导航,可是想要经过Eclipse进行编译源代码,甚至调试就没法办到了。web


这么强大的Eclipse,怎么用起来这么力不从心呢,罪魁祸首仍是本身太孤陋寡闻了,这么强大的maven,Eclipse怎么会没有插件支持呢,有了maven插件,Eclipse导入maven项目(也就是大多数开源项目的目录结构),在Eclipse上面就可以直接进行编辑,甚至经过Eclipse去编译、调试源项目。apache


既然知道了怎样阅读开源项目的源代码,接下来就是安装Eclipse的maven插件,而后源代码、二次开发...浏览器


前面说了这么多废话,是否真的有效呢,下面以Axis2源代码为例,作一个小实验例子,修改services/listServices请求的处理源码,使得原先仅支持WSDL方式描述的Web服务如今也支持OWL4WS的Web服务描述。
tomcat


第一步:安装mavenapp

安装maven实在是简单,从 http://maven.apache.org/download.html 下载最新的maven版本,而后解压,配置MAVEN_HOME和MAVEN_OPTS以及path环境变量便可。MAVEN_HOME指向maven的跟目录,MAVEN_OPTS配置maven执行时的参数,因为MAVEN默认设置的内存比较少,编译大项目时可能会出现OutofMemory的状况,如我没有设置MAVEN_OPTS而编译Axis2的源码时就出现了OutofMemory的状况,最后配置path,指向%MAVEN_OPTS%\bin便可。使得在命令行界面中可以直接使用maven命令。更多关于maven的介绍,推荐一本书给你们:《Maven实战》,也有叫《Maven in action》,是一个中国人写的,浅显易懂。eclipse


第二步:安装Eclipse的maven插件webapp

Help->Install New Software->Add,添加以下内容:maven

m2e - http://download.eclipse.org/technology/m2e/releases学习

如 http://www.eclipse.org/m2e/download/ 所示,上述插件的路径应该为m2e的最新版本,使用以前的版本可能会出现依赖其余插件的状况,致使m2e插件安装不上,SB的Eclipse也没有提示m2e到底依赖哪些插件致使其安装不上,度娘却是可以提供一下帮助,可是几乎不能找到一个可以使用的。

安装完m2e插件以后,就能经过Eclipse打开maven格式的项目,并可以借助Eclipse对maven格式的源项目进行编译,固然也能够直接经过Eclipse建立一个Maven项目,从而使用maven的方式管理你的项目。maven实在是强大,若是你使用Java语言写程序,了解maven真心是有必要。安装完后再建立项目或者导入项目时,就能够选择Maven进行了。安装完插件后会看到以下效果:



第三步:在Eclipse中修改源代码

经过Eclipse导入maven项目,就能使用Eclipse的可视化导航功能对源码进行阅读及修改,还能直接执行相关的mvn命令,导入后的程序以下图所示:



第四步:经过mvn package编译并打包源码,获得发行版本,进行测试

有了maven,源代码的编译及打包就变得容易多了,能够直接经过Eclipse进行,选择项目右键Run As或者右键单击项目的pom.xml文件Run As便可。以下图所示:



固然,也能够直接经过命令行进行打包编译,我选择采用命令行进行,因为我只修改了Axis2源码中的两个模块,这两个模块分别是axis2-transport-http和axis2-webapp。对这两个模块的命令行编辑命令以下:

[plain] view plaincopyprint?

  1. C:\OpenSource\axis2-1.6.0-src\axis2-1.6.0\modules\transport\http>mvn clean install  

  2. [INFO] BUILD SUCCESS  

  3.   

  4. C:\OpenSource\axis2-1.6.0-src\axis2-1.6.0\modules\webapp>mvn clean package  

  5. [INFO] Building war: C:\OpenSource\axis2-1.6.0-src\axis2-1.6.0\modules\webapp\target\axis2.war  

  6. [INFO] BUILD SUCCESS  


mvn install是将axis2-transport-http模块安装到maven本地仓库中,而mvn package是将源程序按指定的格式打包,因为webapp模块的pom.xml文件中指定了不少依赖模块,包括其余项目的或者axis2自己的模块,如transport-http模块,打包时会从本地仓库中自动获取其依赖的模块,并打包。若是本地仓库中没有相应的模块,会去网上自动下载,这也是为何第一次编译开源项目时会花费很长时间的缘由。


将axis2.war包拷贝到tomcat的webapp目录下,启动tomcat,在浏览器中输入http://localhost:8080/axis2/services/listServices,便可看到修改后的页面已经对OWL4WS进行了支持。以下图所示:



回过头来,发现本篇文章满是废话,不过就是想表达一下,maven真心是灰常强大,对于想要阅读Java开源项目源代码,或者有在这些源代码的基础上进行二次开发冲动的童鞋,必定不要错过maven的学习,不过感受这种方式在修改源代码,而后进行测试这种方式仍是很是不方便,命令行编译,还得copy到tomcat下测试运行,哪位有更好的阅读源代码并进行二次开发的方式,请你必定要告诉我啊。

相关文章
相关标签/搜索