spring源码阅读环境搭建
文章如有错误或改进之处,欢迎留言讨论。
本文介绍使用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方法测试即可
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(); } }
-
最后,安装过程中异常汇总
-
出现异常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版本。