Spring源码导入IDEA ,极限拉扯,无伤单杀
在学源码,希望跟着视频一起走流程,拉源码到本地到顺利执行,稀里糊涂,花了我2天时间。
最重要最麻烦的就是
Gradle,kotlin,spring等版本的不一致。导致最多坑,还有就是阿里云等url 网速过慢。
有问题可以 在评论区 留下你的问题。
tips:
如果觉得源码debug起来,build太慢了。可能是IDEA配置,选的是Gradle中运行,修改配置成IDEA中运行,然后会遇到三个坑。在本文最下面会有解决方法,有什么其他问题,可以留言讨论!
1、确定你要的spring版本
我选择的是 spring 5.2.x
查看github,或者gitee上。gradle.
2、下载对应版本的gradle,设置环境变量等(这一步可以略过,只是为了以后少麻烦)
每一次构建,不过不设置本地,会重新从网络的下载gradle。
不下载本地,就多等一会儿。影响不大。
3、git clone 命令 到本地
git clone git@gitee.com:yasin4040/spring-framework.git
这是我的 基本也不会动,可以直接gitclone。默认是master分支
4、git 切换到想要去的分支
//查看分支
git branch -a
//命名,并切换分支
git checkout -b 5.2.x origin/5.2.x
//再次查看当前分支
git branch
顺利切换
5、更改 本地的gradle\wrapper\gradle-wrapper.properties 文件
本地Gradle配置方法,免去长时间的更新同步等待
distributionUrl=file:///D:/repo/gradle-5.6.4-bin.zip
6、先修改文件
6.1、修改build.gradle大概290行左右,加上我们国内的阿里云maven仓库。
repositories {
// 新增2个阿里镜像地址
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/repository/spring' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter' }
mavenCentral()
maven { url "https://repo.spring.io/libs-spring-framework-build" }
// 新增spring插件库
maven { url "https://repo.spring.io/plugins-release"}
}
6.2、修改settings.gradle文件
repositories {
maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
maven { url "https://maven.aliyun.com/repository/public" }
gradlePluginPortal()
maven { url 'https://repo.spring.io/plugins-release' }
}
6.3、修改gradle.properties文件
org.gradle.jvmargs=-Xmx2048M
org.gradle.caching=true
org.gradle.parallel=true
kotlin.stdlib.default.dependency=false
## 启用新的孵化模式
org.gradle.configureondemand=true
## 开启守护进程 通过开启守护进程,下一次构建的时候,将会连接这个守护进程进行构建,而不是重新fork一个gradle构建进程
org.gradle.daemon=true
7、根据sprign给出的提示,去 预编译文件:
./gradlew :spring-oxm:compileTestJava
./gradlew :spring-core:compileTestJava
8、导入IDEA中
选中文件 build.gradle 用idea打开。
9、修改idea的Gradle的配置(也可以跳过)
指定本地下载的gradle
10、创建自己的demo 新模块
11、修改demo的build.gradle
repositories {
mavenLocal()
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
implementation(project(":spring-context"))
}
12、写文件 开启debug
13、每次运行很慢,都要去build,使用idea 去运行
可以通过 File–>Setting–> Build,Execution,Deployment–>Build Tools–>Gradle 设置 Build and run using: 选择Intellj IDEA 即可。
14、运行报错
报错 Kotlin: warnings found and -Weeror specified
删除-weeror
还有一个
符号: 变量 CoroutinesUtils
位置: 类 org.springframework.core.ReactiveAdapterRegistry.CoroutinesRegistrar
添加到spring-core-main
15、问题3: 符号: 类 InstrumentationSavingAgent
java: 找不到符号
符号: 类 InstrumentationSavingAgent
位置: 程序包 org.springframework.instrument
解决
demo模块的build.gradle 增加
compile(project(“:spring-instrument”))
如下
plugins {
id 'java'
}
group 'org.springframework'
version '5.2.21.BUILD-SNAPSHOT'
repositories {
mavenLocal()
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
// implementation(project(":spring-context"))
compile(project(":spring-context"))
compile(project(":spring-instrument"))
compile group: 'org.aspectj', name: 'aspectjweaver', version: '1.8.6'
}
顺利!!!一点debug,1s就进断点!!!!!!!!!