前言
以前学习spring的时候都是maven添加spring的依赖.然后自己写几个junitTest.debug到源码里去看看..最近在刚好在看spring相关书籍.想去修改源码做做实验.所以就尝试了下把github上的spring源码导入到idea中.
不管是市面上的书籍还是很多博客.我觉得在这个方面写的都不太好..其实没那么复杂..这里简单介绍下我的操作方法.
clone
首先肯定是从github上去clone源码. https://github.com/spring-projects/spring-framework.
最好是用命令行或者是其他工具去做clone,而不是直接使用idea的clone..因为直接使用idea的clone后面会需要多操作几步,略有麻烦..我这里是使用了idea的clone.
解决编译错误
打开项目以后肯定会遇到各种报错,编译问题..比如spring-core这个模块下面很多类都会要用到Objenesis和cglib相关的类.发现都没有.
这个时候不管是spring相关书籍,比如《spring源码深度解析》还是网上很多博客.都说你要去把这几个jar导入,然后修改gradle脚本之类的.让idea能找到这些类...其实这是不必要的.
直接去查看项目根目录下import-into-idea.md.
里面讲到clone项目以后首先要做的是
./gradlew cleanIdea :spring-oxm:compileTestJava
做完这不操作会自动运行gradle脚本..spring-core项目下的gradle的有2个task就是repack cglib和objenesis.
命令运行完以后你会发现spring-core下会多出几个jar
这几个jar就是你编译缺少的那些class.
所以根本不用去网上找jar再导入.gradle脚本里都帮你写好了..
这个时候如果你的项目直接是命令行clone下来的这个时候导入idea就没问题了...
idea重新导入
如果之前不是命令行clone下来的.而是使用idea直接去clone的.那这个时候尽管已经有了这些jar.但是还是提示你找不到这些类.
这个时候只要重新导入一下项目就好了.(或者把那些jar添加到classpath里也可以.但是麻烦.不如重新导入项目简单)
先去在recent projects里把spring的项目删掉.再重新导入
先gradle项目就OK了.这个时候就不会有编译错误了...
其他操作
最后就是按md里说的那样,把spring-aspect排除掉...
如果还有编译错误的话可以在compiler里剔除那个模块
然后就可以愉快的运行其他模块的unit tests了..