写在前面
以下内容为笔者实践而来,并结合自己的推测整理。若有不对或疏漏的请友善交流。本文以commons-pool为例,介绍如何在Idea中进行源码修改调试。
第一种方式
原理
- 将源码以module的形式引入,idea中识别module高于仓库jar,但module引入只限于同级。
- 优点:修改后运行即可查看
- 缺点:module有层级限制,且有可能未运行module中的源码包。
步骤
-
GitHub上找寻源代码,[commons-pool][https://github.com/apache/commons-pool.git];Idea->New project from version controll
- 若未识别maven项目,手动add framework support。已识别则忽略此步骤。
-
打开引用了commons-pool依赖的项目,操作File->New module from existing resource。将源码包以module形式引入。
-
注意:保持引入的module在idea中的显示为同级别module;若存在父子module引用,如下图,你需要保证引入的module也在同一级;否则可能仍不是以源码包运行。
-
笔者试验当前idea只能引入到与父级同级别,尝试将子module作为单独项目打开引入并运行,如下图,若子module无需依赖其他module,可以运行,但有其他子module依赖,容易报错。若项目只依赖第三方包,可尝试此方法。
-
-
验证
- 引入以后,右边菜单栏->reimporty依赖->找到引用了依赖包处,点击,查看是否跳转到引入的源码中;需要注意的是,此处验证即使能跳转,也有可能还是使用了原先的依赖包中,具体以运行时,断点是否能进入引入的源码包中为准;
第二种方式
原理
- 利用同组织版本包会对覆盖相同包,本地修改编译覆盖。
- 优点:保证运行的即为修改的代码,一般不会有什么奇怪错误产生。
- 缺点,需重新clean install。
步骤
- 拉取源码
- 本地maven clean install
- 项目中restart即可
- 验证:可以从本地仓库中解压对应jar包查看