Loading...
墨滴

程序员小杰

2021/08/16  阅读:59  主题:默认主题

IDEA编译Spring源码

笔者的环境与版本

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

image.png
image.png

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

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

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

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

步骤1:

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

错误三:

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

user = User{id=1, name='ssss'}

程序员小杰

2021/08/16  阅读:59  主题:默认主题

作者介绍

程序员小杰