如何快速导入并构建Spring Framework源码?
问题引入
Spring Framework 的源代码是一位高级 Java 程序员必须要掌握的,之前学习源码很多时候都是通过 IDEA 反编译来查看 Spring 源码的。学习源码最好还是把官方的代码下载下来然后导入到 IDEA 编译构建,然后一步一步调试。
之前尝试了很多次构建 Spring 源码要么就是 IDEA 一直跑构建进度条,要么就是各种依赖下载失败。在经过无数次尝试之后,笔者把会遇到的坑以及解决方案都记录下来了。希望通过本篇文章,你可以掌握如何构建 Spring 源码,成为一名熟悉源码的高手。
下载源码压缩文件
进入 Github 搜索 spring framework,然后进入官方的仓库页面,再找到 tag 为 v5.2.0 RELEASE 的版本,本篇文章使用的是这个版本。
直接点击 Code 按钮然后下载 zip 文件即可,千万别使用 git clone 命令了。不然得话你会发现你要下载几个 G 的文件,因为你会把 git 提交记录也会同步下来。
导入源码修改配置文件
解压 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" }
}
最后静静等待构建完成,大约花费一分钟。
可能会发生有的依赖不存在的情况,只需要把那个依赖删除即可,具体是做啥的笔者也不是很清楚。
然后继续构建,期间可能出现一些异常,但是无伤大雅,不影响最终构建结果。
等到构建完成之后,你会发现左侧的侧边栏的各个模块都有了 IDEA 图标显示,这就表示构建成功了。
定义一个自定义模块
你可以创建一个自定义模块,尝试一下是否能导入项目内的 spring-context:
导入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();
}
}
成功地打印出了 HelloWorld!
怎么样,你学会了吗?😁😁😁
转载自:https://juejin.cn/post/7376113820232859687