1. 环境准备
- spring-framework 5.2.2.RELEASE:https://github.com/spring-projects/spring-framework
- gradle-5.6.4:参考这篇文章下载安装Gradle,版本换成5.6.4即可:https://blog.csdn.net/qq_28834355/article/details/109165291
- IDEA
2. Spring 环境配置
- 在 gradle 目录 init.d 底下新建文件 init.gradle,把下面的内容复制进去
allprojects{
repositories {
def REPOSITORY_URL = 'https://maven.aliyun.com/nexus/content/groups/public/'
all { ArtifactRepository repo ->
def url = repo.url.toString()
if ((repo instanceof MavenArtifactRepository) && (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com'))) {
project.logger.lifecycle 'Repository ${repo.url} replaced by $REPOSITORY_URL .'
remove repo
}
}
maven {
url REPOSITORY_URL
}
}
}
- 解压上一步下载的 spring 源码压缩包,进入根目录
- 找到 settings.gradle,修改 repositories 如下
pluginManagement {
repositories {
gradlePluginPortal()
maven { url 'https://maven.aliyun.com/repository/public' }
maven { url 'https://repo.spring.io/plugins-release' }
}
}
- 找到 gradle.properties,修改内容如下:
version=5.2.2.RELEASE
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.caching=true
org.gradle.parallel=true
- 找到 build.gradle,修改 buildscript.repositories 内容如下。底下还有一个 repositories ,也改成一样的。
buildscript {
repositories {
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
mavenCentral()
jcenter()
google()
maven { url "https://repo.spring.io/libs-spring-framework-build" }
}
dependencies {
classpath 'org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16'
classpath 'io.spring.asciidoctor:spring-asciidoctor-extensions:0.1.3.RELEASE'
}
}
- 进入 spring-framework\gradle\wrapper 目录,将前面下载的 gradle-5.6.4-bin.zip 复制过来。并修改文件 gradle-wrapper.properties,内容如下:
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=gradle-5.6.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
- 回到 spring 根目录下,执行如下命令
gradle :spring-oxm:compileTestJava
- 等待编译完毕即可,成功之后会出现 BUILD SUCCESSFUL
注意:spring和gradle的版本是有对应关系的,如果报错提示build_scan_plugin版本问题,一般是gradle版本跟spring版本不符。根据报错信息,参考这里重新下载:
https://docs.gradle.com/enterprise/compatibility/#build_scan_plugin
3. 调试源码
IDEA打开spring-framework,新建一个我们自己的测试模块。File -> New Module 选择Gradle项目,勾选Web。
修改 build.gradle,添加 spring-context 依赖:
随后,写一个简单的main程序启动试试:
我这边一开始启动是报错的,有以下2个问题:
报错1:
Error:(354, 51) java: 找不到符号
符号: 变量 CoroutinesUtils
位置: 类 org.springframework.core.ReactiveAdapterRegistry.CoroutinesRegistrar
解决方法:
File -> Project Structure -> Libraries -> + > Java,然后选择spring-framework/spring-core/kotlin-coroutines/build/libs/kotlin-coroutines-5.2.2.RELEASE.jar,在弹出的对话框中选择 spring.spring-core.main
然后重新编译。
报错2:
Error:(26, 38) java: 找不到符号
符号: 类 InstrumentationSavingAgent
位置: 程序包 org.springframework.instrument
解决方法:
在刚刚新建的模块下,添加依赖 spring-instrument ,如下:
重新执行main方法,启动成功啦