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

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

由于当前Java开源项目几乎都是采用maven或者ant的方式打包的,所以上述方法再一定程度上解决了阅读源码的问题,至少通过Eclipse能够实现源码之间的导航,但是想要通过Eclipse进行编译源代码,甚至调试就无法办到了。

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

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

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

第一步:安装maven

安装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的maven插件

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

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. C:\OpenSource\axis2-1.6.0-src\axis2-1.6.0\modules\webapp>mvn clean package
  4. [INFO] Building war: C:\OpenSource\axis2-1.6.0-src\axis2-1.6.0\modules\webapp\target\axis2.war
  5. [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下测试运行,哪位有更好的阅读源代码并进行二次开发的方式,请你一定要告诉我啊。

时间: 2024-08-02 06:57:34

【转】Java开源项目源码阅读方法及二次开发方法的相关文章

Android 开源项目源码解析(第二期)

Android 开源项目源码解析(第二期) 阅读目录 android-Ultra-Pull-To-Refresh 源码解析 DynamicLoadApk 源码解析 NineOldAnimations 源码解析 SlidingMenu 源码解析 Cling 源码解析 BaseAdapterHelper 源码分析 Side Menu.Android 源码解析 DiscreteSeekBar 源码解析 CalendarListView 源码解析 PagerSlidingTabStrip 源码解析 公共

分析开源项目源码,我们该如何入手分析?(授人以渔)

1 前言 本文接上篇文章跟大家聊聊我们为什么要学习源码?学习源码对我们有用吗?,那么本篇文章再继续跟小伙伴们聊聊源码这个话题. 在工作之余开始写SpringBoot源码分析专栏前,跟小伙伴们聊聊"分析开源项目源码,我们该如何入手分析?"这个话题,我们就随便扯皮,反正是跟小伙伴们一起学习交流,没必要太正式. 小伙伴们看完本文后,若有自己的源码阅读心得可以在下面进行评论或私聊我进行分享,让我从小伙伴们身上GET多点源码阅读的一些技巧,嘿嘿. 2 学习开源框架源码到底难不难? 那么,先跟小伙

Android 开源项目源码分析第一期正式发布

由 Trinea 发起.几十名 Android 开发者参与的Android 开源项目源码分析第一期正式发布. 从简介.总体设计.流程图.详细设计全方面分析开源库源码,第一期包括 10 个著名开源库及 5 个公共技术点的全面介绍. 分析文档 作者 Volley 源码解析 grumoon Universal Image Loader 源码分析 huxian99 Dagger 源码解析 扔物线 EventBus 源码解析 Trinea xUtils 源码解析 Caij ViewPagerindicat

Java集合框架源码阅读之AbstractCollection

AbstractCollection是集合实现类的根抽象实现类,它实现了Collection接口,集合中的三个分支Set.List.Queue都是继承此类之后再进行各自实现的扩展,分别是AbstractSet.AbstractList.AbstractQueue.这三个分支有一些共同之处,需要用一些共同的方法,因此出现了AbstractCollection类,它包含了一些这三个分支都会用到的常用方法.而这三个分支也各有抽象类,因为这三个分支下面的一些具体实现也会有一些当前分支通用的方法,因此也给

汇聚各种android开源项目源码分类总汇-IT蓝豹

android开源项目源码分类总汇: 1.完整源码 (29) 2.开发框架 (14) 3.弹出视图 (Popup View) (6) 4.引导页 (Intro&Guide View) (6) 5.手势交互 (Gesture) (13) 6.图表 (Chart) (9) 7.视图切换 (View Transition)(14) 8.视图布局 (View Layout) (14) 9.视图效果 (View Effects)(23) 10.动画 (Animation) (34) 11.文本显示 (Te

如何高效地查看开源项目源码?

我们为什么要看源码? 这个小标题好像有点扯淡,不过我感觉还是有必要聊一聊. 最近搞 Blazor,手边常备 AspNetCore 源码,遇到问题了就翻源码. 然后有同样关注 Blazor 的同学会一起讨论一些问题,我知道的问题会直接分享,我不知道的问题,我就,甩一句,"看源码" 然后有的同学炸了,说,"不是每个人都可以像你一样看源码,源码不是每个人都能看的,不是每个人都想看源码" 当然原话不是这样,后两句是我添油加醋的,不过这两句想必是大部分同学的心声,心里害怕看源

Java多线程——ReentrantReadWriteLock源码阅读

之前讲了<AQS源码阅读>和<ReentrantLock源码阅读>,本次将延续阅读下ReentrantReadWriteLock,建议没看过之前两篇文章的,先大概了解下,有些内容会基于之前的基础上阅读.这个并不是ReentrantLock简单的升级,而是落地场景的优化,我们来详细了解下吧. 背景 JUC包里面已经有一个ReentrantLock了,为何还需要一个ReentrantReadWriteLock呢?看看头注解找点线索.它是ReadWriteLock接口的实现.那看看这个接

AppCan 移动应用开发项目源码分享:嗡嗡旅游App开发

开发者介绍:老家湖北巴东好山好水,神农溪.巴人河.三里城等都是旅游好去处.中秋节回了趟老家,看到家乡的原生态景色吸引了大批游客,由此萌发了想法:用移动技术开发一个App试水,把家乡景点介绍给更多的人.于是,耗时一个月的<嗡嗡旅游>应运而生,特此将项目源码分享给广大AppCan开发者. 项目实现功能 用户注册.登录,游记查看和发布,查看辖区内景区.酒店.交通.攻略等信息,内容收藏.评论和分享,查看地图,景区门票.酒店电话预定等. 项目使用插件 引导页 引导页3张图片采用的是全屏显示的slider

java 企业项目源码

开发快报: 页面打印功能,websocket 强制下线功能,玩转websocket技术  [金牌]获取[下载地址]   QQ: 313596790A 代码生成器(开发利器);     增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都