Java17 构建 Spring 源码

295 阅读2分钟

前置条件

  • OracleJDK17
  • Gradle7.4.x
  • Idea2022.2

JDK 这里切记不要使用 OpenJDK。因为会缺少一些依赖

Idea 的版本可以随自己的习惯进行替换


初始化工程

1.拉取代码

git clone https://github.com/spring-projects/spring-framework.git

这里我拉取的是 main 分支的代码,也就是 20220731 最新的代码

2.导入工程到Idea

等待Gradle下载完依赖

如果下载依赖较慢,也可以将镜像替换为阿里云的

edit-build-repositories.png

repositories {
   maven { url 'https://maven.aliyun.com/repository/public/' }
   maven { url 'https://maven.aliyun.com/repository/spring/' }
   maven { url 'https://repo.spring.io/milestone' }

   mavenLocal()
   mavenCentral()
}

3.构建项目

当最下方的进度条完毕后就可以执行gradle脚本进行构建项目

gradle-build.png

一般情况下Idea会自动根据依赖关系去决定构建顺序,所以不用根据 import-into-idea.md 优先构建什么后构建什么

直接用 build 梭哈完事

测试

1.创建模块

在初始化工程后,我们需要创建一个自己用来写代码的模块 my-test

new_module_menu.png

new_module.png 2.编写代码

my-test 模块下创建以下代码

  • MyBean
package io.mvvm;

public class MyBean {
   private String name;

   public String getName() {
      return name;
   }

   public void setName(String name) {
      this.name = name;
   }
}
  • classpath:spring-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "https://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>

   <bean id="myBean" class="io.mvvm.MyBean">
      <property name="name" value="Hello"/>
   </bean>
</beans>   
  • ApplicationContextTest
package io.mvvm;

import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ApplicationContextTest {
   public static void main(String[] args) {
      ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:spring-context.xml");
      ctx.refresh();
      MyBean hello = ctx.getBean(MyBean.class);
      System.out.println("hello: " + hello);
   }
}

现在运行 main 方法后可以看到打印了以下内容说明我们已经成功的运行了spring源码了

hello: io.mvvm.MyBean@14ec4505

踩坑

解决乱码

经过前面的步骤我们已经实现了基本的使用

但是如果我们将打印内容替换为中文会发生什么样的事情呢?下面我们来尝试以下

System.out.println("你好: " + hello);

输出如下

你好�? io.mvvm.MyBean@e50a6f6

通过结果可以看出,全角符号是乱码的状态。出现乱码解决乱码

解决方案

执行以下步骤重启后重新 build 项目即可

change-windows-unicode-utf-8.png