likes
comments
collection
share

如何快速导入并构建Spring Framework源码?

作者站长头像
站长
· 阅读数 29

问题引入

Spring Framework 的源代码是一位高级 Java 程序员必须要掌握的,之前学习源码很多时候都是通过 IDEA 反编译来查看 Spring 源码的。学习源码最好还是把官方的代码下载下来然后导入到 IDEA 编译构建,然后一步一步调试。

之前尝试了很多次构建 Spring 源码要么就是 IDEA 一直跑构建进度条,要么就是各种依赖下载失败。在经过无数次尝试之后,笔者把会遇到的坑以及解决方案都记录下来了。希望通过本篇文章,你可以掌握如何构建 Spring 源码,成为一名熟悉源码的高手。

下载源码压缩文件

进入 Github 搜索 spring framework,然后进入官方的仓库页面,再找到 tag 为 v5.2.0 RELEASE 的版本,本篇文章使用的是这个版本。

直接点击 Code 按钮然后下载 zip 文件即可,千万别使用 git clone 命令了。不然得话你会发现你要下载几个 G 的文件,因为你会把 git 提交记录也会同步下来。

如何快速导入并构建Spring Framework源码?

导入源码修改配置文件

解压 zip 文件之后,使用 IDEA 打开源码。找到工程根目录下的 build.gradle 文件,修改里面的配置。 在 buildScript 下面的 repositories 闭包内添加阿里云镜像源可以加速构建:

repositories {
    maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
    maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
}

在大概 300 行的位置,找到 repositories 闭包,在内部添加阿里云镜像源:

repositories {
    maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
    maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
    mavenCentral()
    maven { url "https://repo.spring.io/libs-spring-framework-build" }
}

最后静静等待构建完成,大约花费一分钟。

如何快速导入并构建Spring Framework源码?

可能会发生有的依赖不存在的情况,只需要把那个依赖删除即可,具体是做啥的笔者也不是很清楚。

如何快速导入并构建Spring Framework源码?

如何快速导入并构建Spring Framework源码?

然后继续构建,期间可能出现一些异常,但是无伤大雅,不影响最终构建结果。

如何快速导入并构建Spring Framework源码?

等到构建完成之后,你会发现左侧的侧边栏的各个模块都有了 IDEA 图标显示,这就表示构建成功了。

如何快速导入并构建Spring Framework源码?

定义一个自定义模块

你可以创建一个自定义模块,尝试一下是否能导入项目内的 spring-context:

如何快速导入并构建Spring Framework源码?

导入Spring依赖

要想使用 Spring Framework,那么必须要导入,这里导入的是项目内部的,也就是所谓的“一方库”。在 dependencies 闭包内添加如下代码:

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
    compile(project(":spring-context"))
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

创建配置类

编写一个配置类,配置一些你想要的 Bean:

package org.codeart.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("org.codeart")
public class AppConfig {
    // ...
}

编写一个 Service Bean:

package org.codeart.service;

import org.springframework.stereotype.Service;

@Service
public class AppService {
   
   public void hello() {
      System.out.println("HelloWorld!");
   }

}

编写主方法,创建上下文:

package org.codeart;

import org.codeart.config.AppConfig;
import org.codeart.service.AppService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class Main {

   public static void main(String[] args) {
      ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
      AppService appService = context.getBean(AppService.class);
      appService.hello();
   }
}

如何快速导入并构建Spring Framework源码?

成功地打印出了 HelloWorld!

怎么样,你学会了吗?😁😁😁

转载自:https://juejin.cn/post/7376113820232859687
评论
请登录