Spring5源码 - 构建源码环境

简介: Spring5源码 - 构建源码环境


开发环境

IDEA 2020.2.1 + OpenJDK8U-jdk_x64_windows_hotspot_8u265b01 + gradle-6.5.1-bin.zip

遵循官方指导文档


git clone 源码

源码地址: https://github.com/spring-projects/spring-framework

copy地址,待会要用

这里我将放到了 D:\workspace

打开 git bash ,执行如下命令 git clone https://github.com/spring-projects/spring-framework.git

等一会即可,如下所示

官方指导手册

https://github.com/spring-projects/spring-framework/wiki/Build-from-Source


gradle调整 [可选]

gradle离线安装

打开 D:\workspace\spring-framework\gradle\wrapper\gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.6-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

gradle会去 distributionUrl对应的地址下载gradle压缩包,如果网络不好的话,可以提前现在好一个离线包

修改 distributionUrl,如下

distributionUrl=file\:///D\:/Soft/gradle-6.5.1-bin.zip

安装目录: windows系统默认GRADLE_USER_HOME 为 c:\Users\用户\.gradle


gradle中央仓库地址调整

国内环境的话,建议调整一下gradle的中央仓库。

找到 build.gradle

打开 285行 添加阿里云地址

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

执行 gradlew.bat

windows环境下 gradlew.bat 就是我们需要执行的脚本

第一次要下载好多依赖,速度取决于你的网速,如果失败的话,多执行几次,基本都是可以成功的。


导入到IEDA

https://github.com/spring-projects/spring-framework/blob/master/import-into-idea.md

根据提示来操作即可

Precompile spring-oxm with ./gradlew :spring-oxm:compileTestJava
Import into IntelliJ (File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle)
When prompted exclude the spring-aspects module (or after the import via File-> Project Structure -> Modules)
Code away

gradlew :spring-oxm:compileTestJava

第一步 gradlew :spring-oxm:compileTestJava


导入到IDEA

选择你拉取的spring源码,方式选择build.gradle

等待index完成,需要下载jar包 ,不是很快(我用了好几次,耗时好几个小时),如果期间出错,多试几次。

点击刷新按钮,如上所示,基本可以认定为构建成功。


编译和 运行Testst设置为 IntelliJ IDEA (建议)

编译完成后建议 将编译和 运行Testst设置为 IntelliJ IDEA , 默认的Gradle特别慢。

C:/Users/artisan/.gradle/wrapper/dists/gradle-6.5.1-bin/b4shxvjcpfsjxpjuxxiaa7cyh/gradle-6.5.1

这个地方选OPEN JDK11 会有问题,请见问题记录


测试验证

新建子模块

选择 gradle

随便建立一个子module的名称

添加依赖

compile(project(":spring-context"))


编写代码 加载Bean测试

package com.artisan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.artisan")
public class AppConfig {
}
package com.artisan;
import org.springframework.stereotype.Component;
@Component
public class ArtisanService {
}
package com.artisan;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class ArtisanTest {
  public static void main(String[] args) {
    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
    ArtisanService bean = ac.getBean(ArtisanService.class);
    System.out.println(bean.getClass().getName());
  }
}

运行测试

至此,spring5.1.x的源码编译导入idea就算完成了。


Gradle 下载的依赖包存储的位置

Windows系统默认下载到:C:\Users\(用户名)\.gradle\caches\modules-2\files-2.1

Mac系统默认下载到:/Users/(用户名)/.gradle/caches/modules-2/files-2.1


问题

D:\workspace\spring-framework\spring-core\src\main\java\org\springframework\core\metrics\jfr\FlightRecorderStartupEvent.java:19:15
java: 程序包jdk.jfr不存在

最开始使用的OpenJDK jdk-11.0.8.10-hotspot 更换JDK为 OpenJDK8U-jdk_x64_windows_hotspot_8u265b01

【1】gradle JVM

【2】 项目编译环境 的JDK

重新编译,即可解决。

参考子路老师的博客 ,https://blog.csdn.net/java_lyvee/article/details/107300648 ,感谢大佬分享。


其他可参考

https://www.yuque.com/docs/share/17a9d955-2153-4113-8bbb-79c35e274ed0?#


相关文章
|
8天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
33 2
|
25天前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
1月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
48 4
|
1月前
|
Java API 数据库
如何使用Spring Boot构建RESTful API,以在线图书管理系统为例
【10月更文挑战第9天】本文介绍了如何使用Spring Boot构建RESTful API,以在线图书管理系统为例,从项目搭建、实体类定义、数据访问层创建、业务逻辑处理到RESTful API的实现,详细展示了每个步骤。通过Spring Boot的简洁配置和强大功能,开发者可以高效地开发出功能完备、易于维护的Web应用。
61 3
|
23天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
97 62
|
21天前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
14天前
|
前端开发 Java 开发者
Spring生态学习路径与源码深度探讨
【11月更文挑战第13天】Spring框架作为Java企业级开发中的核心框架,其丰富的生态系统和强大的功能吸引了无数开发者的关注。学习Spring生态不仅仅是掌握Spring Framework本身,更需要深入理解其周边组件和工具,以及源码的底层实现逻辑。本文将从Spring生态的学习路径入手,详细探讨如何系统地学习Spring,并深入解析各个重点的底层实现逻辑。
40 9
|
10天前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
21 2
|
21天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
40 2
|
29天前
|
自然语言处理 Java API
Spring Boot 接入大模型实战:通义千问赋能智能应用快速构建
【10月更文挑战第23天】在人工智能(AI)技术飞速发展的今天,大模型如通义千问(阿里云推出的生成式对话引擎)等已成为推动智能应用创新的重要力量。然而,对于许多开发者而言,如何高效、便捷地接入这些大模型并构建出功能丰富的智能应用仍是一个挑战。
113 6