目录
1.准备工作
1.1 各版本展示
- Idea 2018.3.6
- jdk 1.8.0_231
- Gradle 4.7
- spring-framework 5.0
1.2 spring-framework下载
下载地址:https://github.com/spring-projects/spring-framework/tree/5.0.x,本次选择5.0版本,下载完成解压后待用。
1.3 gradle下载
下载地址:https://services.gradle.org/distributions/,本次选择4.7版本,下载解压后,添加对应的环境变量即可。
2.导入
2.1 直接导入项目
从File->Open导入解压后的spring源码
2.2 添加时的配置
- 勾选auto-import
- 点击使用本地的gradle
- 配置gradle vm options:-XX:MaxMetaspaceSize=2048m -Xmx2048m -XX:MaxHeapSize=1024m
3.编译
3.1 预编译spring-core和spring-oxm
由import-into-idea.md文件知:需要先编译spring-core和spring-oxm两个项目
预编译spring-oxm,点击compileTestJava
3.1.1 找不到plugins-release文件
修改build.gradle文件,添加仓库地址:
maven { url "http://repo.springsource.org/plugins-release" }
maven { url "https://maven.aliyun.com/repository/spring-plugin" }
修改后如下图:
3.1.2 编译时出现循环引用报错
解决方案:
将 spring-beans.gradle 最后三行改为如下:
// This module also builds Kotlin code and the compileKotlin task naturally depends on
// compileJava. We need to redefine dependencies to break task cycles.
//compileGroovy.dependsOn = compileGroovy.taskDependencies.values - "compileJava"
//compileKotlin.dependsOn(compileGroovy)
//compileKotlin.classpath += files(compileGroovy.destinationDir)
def deps = compileGroovy.taskDependencies.immutableValues + compileGroovy.taskDependencies.mutableValues
compileGroovy.dependsOn = deps - "compileJava"
compileKotlin.dependsOn(compileGroovy)
compileKotlin.classpath += files(compileGroovy.destinationDir)
修改后如下图:
至此编译成功!
3.2 运行Demo
右击项目,添加一个Modules
选择Gradle -> Java
项目结构:
AppConfig.java:
@Configuration
@ComponentScan("com.wat")
public class AppConfig {
public void test(String msg){
System.out.println("msg:" + msg);
}
}
Main.java
public class Main {
public static void main(String[] args) {
AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
AppConfig appConfig = annotationConfigApplicationContext.getBean(AppConfig.class);
appConfig.test("hello spring!");
}
}
3.2.1 找不到spring-instrument的类
运行项目后,提示spring-context找不到spring-instrument的类:
解决方案:
将 spring-context.gradle 的 optional(project(":spring-instrument")) 修改为compile(project(":spring-instrument"))
修改后如下图:
3.2.2 运行成功
4.后记
在下载源码进行本地编译时,总会遇见各种各样的问题。其中,各配件版本号一定要选择好,比如jdk的选择,当选择过高时,就会出现编译失败的情况。但是,随着软件版本的提升,许多地方也正逐步完善,例如之前需要修改dosc.gradle文件中的schemaZip项,但是现在Spring5.0版本的源码中已经修复了该bug,我想这也正是开源的力量在向前推进。