IDEA编译Spring源码

笔者的环境与版本

JDK:1.8.0_271(很重要)
Spring:5.2.4.RELEASE
下载Spring源码,可以从Spring官方的github库中(github.com/spring-proj…)进行下载。由于需要从国外下载,速度肯定会慢,哈哈哈。不过我们可以登录gitee,将项目导入到gitee中,下载速度就会快很多啦。

image.png

将Spring的github仓库地址输入在文本框里

image.png
导入完成之后,点击master,可以看到里面包含很多Spring的历史分支版本
image.png

切换到标签栏,可以看到各种小版本

image.png

查看Spring的版本,找到gradle.properties文件
image.png
image.png

查看Grandl版本,找到spring-framework/ gradle / wrapper/gradle-wrapper.properties
image.png

配置镜像

将源码下载到本地之后,别急着用idea打开,先配置阿里云镜像。
image.png
打开build.gradle文件,找到repositories标签
image.png
在里面加入

 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
image.png

2、镜像问题

出现:Could not resolve: com.ibm.websphere:uow:6.0.2.17,那是因为我将Spring自带的镜像给注释掉了。
image.png

3、jar下载不下来问题

image.png
这个问题挺好解决的,直接Ctrl + c jar包的地址,在浏览器进行下载。
下载完成后,需要找到gradle默认的保存的repository路径,File->Settings->Build,Execution,Deployment->Build Tools ->Gradle。
默认是在C:\Users\Administrator\.gradle
image.png
然后进入.gradle目录下的caches\modules\files-2.1目录中,将下载的jar包拷贝到这里面。
举例:缺少org.python:jython-standalone:2.7.1
image.png
那就需要在files-2.1下建立对应的目录。一个冒号就是分隔符。
image.png
image.png
image.png

笔者将上面遇到的问题都解决之后,Spring就编译成功啦!!!
image.png

添加模块

接下来笔者带大家在spring-framework来创建一个自己的module,看是否能够使用这些源码
image.png
选择Gradle创建一个Java项目
image.png
给module取一个名字
image.png
在新创建的 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);
	}
}
复制代码

启动的过程中又遇到了三个问题(我**太难了┭┮﹏┭┮)

错误一:

image.png
运行一下spring-core中的build的task,会就产生所缺少的jar包
image.png

错误二:

image.png

步骤1:

image.png

步骤2:

需要选择spring-core的main包
image.png

步骤3:添加jar

image.png
image.png
根据版本不同,该jar的所在目录也有可能不同。有可能在spring-core-coroutines包下。该包与spring-core同级。

步骤4:然后重新编译项目。

image.png

错误三:

image.png
打开spring-context.gradle文件,把这个optional改成了compile
image.png
然后再次运行main方法:

user = User{id=1, name='ssss'}
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享