Spring 5.3.x 源码:基础构建

概述

该项目基于以下环境构建:

  • IntelliJ IDEA 2023.1.4
  • Gradle 7.5.1
  • JAVA 11
  • Spring 5.3.x

下载 Gradle

官网:Gradle | Releases

下载概述中对应的版本,放到本地的任意目录,后续配置到 IDEA。

下载 Spring 源码

bash 复制代码
git clone -b 5.3.x https://github.com/spring-projects/spring-framework.git

注意:如果是直接下载的 ZIP 文件,可能遇到以下问题:(非常不建议直接下载 zip 包构建,想知道原因可以继续看,最后我也没有构建成功,而是直接通过 clone 构建的。) 问题原因:缺少git配置,但是即使使用git init 创建后依然报错。

原因参考:issues 地址:github.com/spring-proj... 大概意思:zip 是用来分享源码的,而利于构建。因此推荐使用 clone 下载
提高clone速度的建议:

因为spring包比较大,可能需要很多时间下载,这里提供目前可行的办法提高速度:

  1. 安装油猴,安装名为 GitHub增强 的油猴插件
  2. 重新打开 使用对应的镜像下载可提速,推荐使用香港或台湾的镜像,比较稳定。

Idea配置

配置Gradle

打开 file-> New Projects Setup -> Setting for new Project... 配置新项目的Gradle的环境路径。

Idea打开Spring源码

配置加速镜像

build.gradle文件

添加阿里云镜像

bash 复制代码
repositories {  
    mavenCentral()  
    maven { url "https://repo.spring.io/libs-spring-framework-build" }
    ## 添加以下配置
    maven { url "https://maven.aliyun.com/repository/public" }  
    maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }  
    maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}  
}

settings.gradle文件

添加阿里云镜像

bash 复制代码
pluginManagement {  
    repositories {  
        mavenCentral()  
        gradlePluginPortal()  
        maven { url "https://repo.spring.io/release" }  
        ## 添加以下配置
        maven { url "https://maven.aliyun.com/repository/public" }  
    }  
}

gradle.properties文件

bash 复制代码
version=5.3.39-SNAPSHOT  
## 设置此参数主要是编译下载包会占用大量的内存,可能会内存溢出  
org.gradle.jvmargs=-Xmx2048m  
## 开启 Gradle 缓存  
org.gradle.caching=true  
## 开启并行编译  
org.gradle.parallel=true  
## 开启守护进程 通过开启守护进程,下一次构建的时候,将会连接这个守护进程进行构建,而不是重新fork一个gradle构建进程  
org.gradle.daemon=true  
kotlin.stdlib.default.dependency=false

配置完重启IDEA,等待后台自动下载依赖,自动构建完成。大概需要十到二十分钟左右。

验证成果

创建module

配置模块的build.gradle文件

导入spring核心依赖

bash 复制代码
dependencies {  
    testImplementation platform('org.junit:junit-bom:5.9.1')  
    testImplementation 'org.junit.jupiter:junit-jupiter'  
    ## 添加以下依赖
    implementation(project(":spring-context"))  
}

构建新模块遇到的问题

1. 类过时警告

报错详情:

bash 复制代码
spring-core\src\main\java\org\springframework\core\CoroutinesUtils.java:74: 
警告: [deprecation] AccessibleObject中的isAccessible()已过时
if (method.isAccessible() && !KCallablesJvm.isAccessible(function)) {

解决方案:

在 org.springframework.core.CoroutinesUtils.invokeSuspendingFunction(Method method, Object target, Object... args) 方法上加 @SuppressWarnings("deprecation") 注解即可。

2.Task 'prepareKotlinBuildScriptModel' not found in project ':app' 报错

在当前模块下的bulid.gradle里,加上以下代码

bash 复制代码
tasks.register("prepareKotlinBuildScriptModel"){}

创建实例

java 复制代码
@Component  
public class User {  
  
    @Override  
    public String toString() {  
        return "User{}";  
    }  
}

记得添加@Component注解

创建Main方法

java 复制代码
@Configuration  
@ComponentScan("")  
public class SpringNeoMain {  
  
    public static void main(String[] args) {  
        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(SpringNeoMain.class);  
        System.out.println("applicationContext.getBean(User.class) = " + applicationContext.getBean(User.class));  
    }  
  
}

模块结构

运行结果

相关推荐
露天赏雪1 天前
第3篇:Sentinel熔断降级实战:大模型接口抖动时的服务兜底方案
java·开发语言·人工智能·spring boot·spring·servlet·sentinel
captain3761 天前
▲统一功能——DispatcherServlet源码分析
java·spring·java-ee·log4j·maven
TeamDev1 天前
使用 JxBrowser 在桌面应用中集成 Spring
java·前端·后端·spring·混合应用·jxbrowser·浏览器控件
SL_staff2 天前
从配置失效到逻辑复用:JVS-Logic 如何构建可治理的业务编排中枢
java·spring·产品
程序员吕洞宾2 天前
开源多维表格SmartTable v1.6.10 —— 用户名登录、数据评论及@人、表单分享二维码、性能优化、部署及升级优化
spring·性能优化·开源
liangbo72 天前
Spring系列03:Bean 的三种注册方式
java·spring
CoderYanger2 天前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)
java·数据库·spring·面试·职场和发展·java-ee·mybatis
哦虎!2 天前
【JavaEE进阶】SpringIoC&DI
spring
敲代码的小小酥2 天前
谈SpringMVC与Spring WebFlux的区别与适用场景
java·后端·spring
风若飞3 天前
Spring Ai 入门遇到问题1
java·后端·spring