文章如有错误或改进之处,欢迎留言讨论。
本文介绍使用idea搭建spring框架源码阅读环境。
注意事项:搭建之前请注意spring-framework的版本以及jdk版本的对应。(spring-framework版本与jdk版本有关系,与gradle的版本编译也有关系,其余版本请自行测试)
相关软件版本:
- gradle 4.9
- spring-framwork 5.0.x
- idea 2020.1
一、安装gradle
- 官网下载安装包(zip格式)并解压。
-
配置环境变量
- 添加系统变量GRADLE_HOME(D:\javaApp\gradle-6.7.1为我本地解压路径)
-
编辑path环境变量,添加%GRADLE_HOME%\bin
-
测试是否安装成功
在电脑cmd命令窗口,输入gradle -v
-
修改gradle镜像源(网络好的请无视这条)
二、idea配置gradle
idea中依次打开 File→Settings→Build,Execution,Deployment→Build Tools→Gradle
三、导入并构建spring-framwork源码
- 下载源码
因为github的下载速度太慢,我是从码云下载的,请自行选择:
- 导入工程
idea中,点击File→Open
打开spring源码文件夹下的build.gradle文件
-
等待编译完成即可。
-
编译过程很慢很慢,我等了好几个小时,如果期间出现下载jar包下载超时,重新编译即可。
四、测试
-
新建测试模块,右击项目→New→Modules
-
添加依赖:api(project(“:spring-context”))
-
使用xml配置加mian方法启动spring
- 编写测试bean
public class Hello { public void sayHello() { System.out.println("Hello word!"); } }
- 编写xml配置
resources包下新增applicationContext.xml文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="hello" class="com.wjw.Hello"></bean> </beans>
- 编写启动类MyApplication,运行mian方法测试即可
“`java
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;public class MyApplication {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
Hello hello = (Hello)ac.getBean("hello");
hello.sayHello();
}
}</p></li>
</ul><p>
“`
- 编写测试bean
最后,安装过程中异常汇总
-
出现异常An exception occurred applying plugin request [id: ‘com.gradle.build-scan’, version: ‘1.8’]
解决方式:gradle版本过高导致,请降低版本
-
出现异常No such property: values for class: org.gradle.api.internal.tasks.DefaultTas
解决方式:spring-beans.gradle文件中注释掉以下这行代码
//注释掉这行代码 //compileGroovy.dependsOn = compileGroovy.taskDependencies.values - "compileJava"
- 出现以下异常
Circular dependency between the following tasks: :spring-beans:compileGroovy --- :spring-beans:compileJava --- :spring-beans:compileKotlin --- :spring-beans:compileGroovy (*)
修改spring-beans.gradle文件
//将 spring-beans.gradle 最后三行: //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)
-
如出现编译已正常完成,但是spring-framework源码报错,请确认jdk版本是否适配spring版本。