笔者的环境与版本
JDK:1.8.0_271(很重要)
Spring:5.2.4.RELEASE
下载Spring源码,可以从Spring官方的github库中(https://github.com/spring-projects/spring-framework)进行下载。由于需要从国外下载,速度肯定会慢,哈哈哈。不过我们可以登录gitee,将项目导入到gitee中,下载速度就会快很多啦。
将Spring的github仓库地址输入在文本框里
导入完成之后,点击master,可以看到里面包含很多Spring的历史分支版本
切换到标签栏,可以看到各种小版本
查看Spring的版本,找到gradle.properties文件
查看Grandl版本,找到spring-framework/ gradle / wrapper/gradle-wrapper.properties
配置镜像
将源码下载到本地之后,别急着用idea打开,先配置阿里云镜像。
打开build.gradle文件,找到repositories标签
在里面加入
maven() { url "http://maven.aliyun.com/nexus/content/groups/public/" }
然后使用idea导入spring-framework项目,idea会自动去下载gradle依赖。接下来的事情就交给网速。
坑
1、JDK版本问题
之前笔者的JDK版本是1.8.0_221,然后重新安装JDK,修改版本为1.8.0_271
2、镜像问题
出现:Could not resolve: com.ibm.websphere:uow:6.0.2.17,那是因为我将Spring自带的镜像给注释掉了。
3、jar下载不下来问题
这个问题挺好解决的,直接Ctrl + c jar包的地址,在浏览器进行下载。
下载完成后,需要找到gradle默认的保存的repository路径,File->Settings->Build,Execution,Deployment->Build Tools ->Gradle。
默认是在
C:\Users\Administrator\.gradle
然后进入.gradle目录下的caches\modules\files-2.1目录中,将下载的jar包拷贝到这里面。
举例:缺少org.python:jython-standalone:2.7.1
那就需要在files-2.1下建立对应的目录。一个冒号就是分隔符。
笔者将上面遇到的问题都解决之后,Spring就编译成功啦!!!
添加模块
接下来笔者带大家在spring-framework来创建一个自己的module,看是否能够使用这些源码
选择Gradle创建一个Java项目
给module取一个名字
在新创建的 module 的 build.gradle 文件中,我们添加 spring-context 依赖,这个相当于 Maven 中的 pom.xml:
dependencies {
compile(project(":spring-context"))
}
添加完依赖之后,我们写一个简单的测试类来试试。
首先创建一个User类:
public class User {
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
然后在resources目录下创建 beans.xml 文件,配置该 Bean:
<?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 class="com.gongj.User" id="user">
<property name="id" value="1"/>
<property name="name" value="ssss"/>
</bean>
</beans>
最后编写main方法:
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:beans.xml");
User user = ctx.getBean(User.class);
System.out.println("user = " + user);
}
}
启动的过程中又遇到了三个问题(我**太难了┭┮﹏┭┮
)
错误一:
运行一下spring-core中的build的task,会就产生所缺少的jar包
错误二:
步骤1:
步骤2:
需要选择spring-core的main包
步骤3:添加jar
根据版本不同,该jar的所在目录也有可能不同。有可能在spring-core-coroutines包下。该包与spring-core同级。
步骤4:然后重新编译项目。
错误三:
打开spring-context.gradle文件,把这个optional改成了compile
然后再次运行main方法:
user = User{id=1, name='ssss'}