IDEA编译Spring源码教程

这篇具有很好参考价值的文章主要介绍了IDEA编译Spring源码教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  大家在学习spring时源码总是绕不开的,今天我分享一下我的spring源码编译过程,详细讲解了常见问题的解决办法。

  此过程中要用到的工具及版本:

    1.JDK11

    2.Spring-framework 5.3.27

    3.Gradle7.5.1

    4.IDEA 2021.3

文章目录:

    1.下载spring源码

    2.阅读spring官方编译文档

    3.修改gradle相关配置

    4.开始编译构建

    5.导入IDEA

    6.测试验证

    7.总结

1.下载spring源码

  首先从spring官网https://spring.io/下载源码,spring全家桶包含许多框架,我们选择今天的主角spring-framework,

IDEA编译Spring源码教程

 

  我们可以看到,目前官网上最新版本是6.0.8,更新速度还是很快的,每个版本更新的新特性可以适当了解一下,生产环境不建议用最新版本。今天我选择一个常用的稳定版本5.3.27来编译测试。

点右上角的github图标进入GitHub上的源码页面,页面默认为最新版本,若要编译最新版本直接git clone即可,但是我选择右边release,找到我想要的历史版本5.3.27,选择zip包下载即可下载源码。

IDEA编译Spring源码教程

 

IDEA编译Spring源码教程

IDEA编译Spring源码教程

 

 为了方便大家,可以直接点击此处连接进行下载 https://github.com/spring-projects/spring-framework/archive/refs/tags/v5.3.27.zip

2.阅读spring官方编译文档  

  其实呀,很多搞不定 Spring 源码编译的小伙伴,肯定很多都是去网上随便找个教程,结果各种踩坑,因为搜到的资料参差不齐,这点估计大家都深有体会了。

  所以我们就要养成一个习惯,必须要看官方文档。这里也不是要求大家其它资料不看,毕竟也有很多优秀的博客,大家都是成年人,肯定是全都要喽。

  官方文档一般都是英文,但是别害怕,找个有道翻译,一下就搞定了。

  如何编译 Spring 源码其实 Spring 官方提供了详细的文档,有离线版也有在线版,也就是开源项目都有的 REDAME 文件。

  我这里选择离线版来演示吧。我们解压进入到下载好的 Spring 框架源码项目下,查看 REDAME

IDEA编译Spring源码教程

   用记事本打开会看到里面有一个build from source 的连接,对应的就是spring源码官方编译文档了:https://github.com/spring-projects/spring-framework/wiki/Build-from-Source

IDEA编译Spring源码教程

  接下来,咱们就按照文档来编译 Spring-Framework5.3.27 版本的源码。 根据文档的说明,首先我们要有一个 JDk11 或者更高的版本环境

  我电脑安装的是 JDk8,但是会报错:程序包jdk.jfr不存在,经过排查发现jdk8的lib中是没有jfr这个包的,所以我换了JDK11进行编译。

    IDEA编译Spring源码教程

  3.修改gradle相关配置

  接下来我们需要修改一堆配置,确保编译的环境。

  下载gradle

    因为第一次运行就会去下载 gradle 到本地,然后通过 gradle 来编译 Spring 源码。 这个就很慢了,外网服务器下载,你懂得,有被墙的风险,并且本身也贼慢。

    那为什么开始编译构建就会自动下载 gradle 呢?从哪里下载?下载的版本是多少?

    打开spring源码包,找到里面一个叫gradle的子工程,里面有相关gradle的配置。

IDEA编译Spring源码教程

 打开配置文件gradle-wrapper.properties,有如下内容:

1 distributionBase=GRADLE_USER_HOME
2 distributionPath=wrapper/dists
3 distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
4 zipStoreBase=GRADLE_USER_HOME
5 zipStorePath=wrapper/dists
  • distributionUrl:表示的就是 gradle 的下载地址,默认配置的是一个远程 URL。

  • distributionBase:下载后存放的目录,默认就是用户目录下的 .gradle 目录;

  • zipStoreBase:解压后存放的目录

  我在构建的过程中发现配置的下载地址下载非常慢,经常超时,甚至有时候被墙。所以我们先下载到本地,然后修改配置文件从本地获取 gradle,这样一来编译构建就会快很多了。

  我们只需要修改 gradle 的下载地址就好了,其他的配置项建议保持不变。

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=file\:///D:/mysoft/Program-files/gradle-7.5.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

  上述配置的意思就是如果我们运行 ./gradlew 会自动去 file\:///D:/mysoft/Program-files/gradle-7.5.1-bin.zip 这个目录下载一个 gradle 到当前用户的 .gradle\wrapper\dists目录 ,然后解压到当前用户的 .gradle\wrapper\dists 目录。切记:distributionUrl这个本地路径中不能有空格,否则会报错的 

IDEA编译Spring源码教程 

 

   改完上面的配置后,我们修改gradle仓库的配置。与maven类似,gralde下载依赖包默认是从国外仓库下载的,那就会超级慢,我们要把仓库地址改为国内的阿里云仓库,提高编译速度。

   找到spring源码根目录下的build.gradle,添加阿里云仓库地址  

        IDEA编译Spring源码教程

   

1 maven { url 'https://maven.aliyun.com/repository/public' } //阿里云

 

  第二步,找到spring源码根目录下的settings.gradle,添加阿里云仓库

        IDEA编译Spring源码教程

  第三步(可以不配置),gradle下载依赖的位置。

    gradle默认下载依赖的位置是根据环境变量GRADLE_USER_HOME决定,默认是在C:\Users\用户名\.gradle\caches\modules-2\files-2.1  路径中,因为之前一直用的maven库,这里我们配置环境变量GRADLE_USER_HOME也指向maven本地仓库的地址。

        IDEA编译Spring源码教程

 

4.开始构建编译

  我们编译构建 Spring 源码,一般都是要导入到 IDEA 里面进行测试或者阅读的。Spring 对于如何导入也提供了文档,是不是很贴心。当然也有导入 Eclipse 的文档,大家可以根据自己的需求来操作。我这里是用 IDEA 的,你如果导入 Eclipse 操作也都是基本上一样的。
  打开spring源码根目录,查看import-into-idea.md文件,当然如果要导入eclipse也有import-into-eclipse.md文件。

      IDEA编译Spring源码教程

   根据提示文档,在导入idea之前要提前先编译spring-oxm、spring-core这两个模块

  在spring源码根目录打开一个cmd命令窗口,执行以下命令进行编译,如果cmd命令遇到:'.' 不是内部或外部命令,也不是可运行的程序  这个错误时,说明gradle环境没有配置好,可以配置下gradle环境变量,或者直接打开一个powershell窗口进行编译即可。

  

1 ./gradlew :spring-oxm:compileTestJava

  编译之后发现报错:

IDEA编译Spring源码教程

   这个问题就是上面说的JDK版本问题,我本地用的jdk8,但是jdk8没有jfr这个包,我们升级jdk11就可以了,接着编译:

IDEA编译Spring源码教程

 第一次预编译应该会很慢,gradle需要下载依赖包,只需要耐心等待即可。

  接下来编译第二个模块,spring-core,执行以下命令,可以看到编译成功。

1 ./gradlew :spring-core:compileTestJava

  IDEA编译Spring源码教程

 5.导入IDEA

  打开IDEA,左上角依次点击:File->New->Project from Existing Sources  

  IDEA编译Spring源码教程

   选择源码的根目录:

  IDEA编译Spring源码教程

 选择编译工具为gradle

  IDEA编译Spring源码教程

 点击完成之后,就打开了项目,第一次打开会进行编译下载依赖包,需要等一会儿,具体时间长短要看电脑性能,

过了一会儿发现我的编译报错了,

  IDEA编译Spring源码教程

   如果出现这个错误的话,基本上就是IDEA与gradle的版本不一致问题,在网上搜的话都会让你修改gradle各种配置,但即使修改好了,也会出现另外的问题,听我的,一定直接升级IDEA版本,我之前用的是2019.2,版本缺失有点老了,升级到了2021.3,问题立马就解决了,而且新版本的IDEA比老版本性能也提升不少,该升级就升级。

  升级完版本之后继续编译会看到下面的编译成功信息:

  IDEA编译Spring源码教程

 接下来,我们对IDEA进行一些配置,改成使用我们本地的gralde和本地的maven仓库,这样编译会更快,

  IDEA编译Spring源码教程  

  IDEA编译Spring源码教程

   至此,IDEA编译spring源码就算大功告成了。

6.验证测试

   编译成功了之后,我们新建一个模块,用来写自己的一些代码。

  1.在IDEA中新建module,

  IDEA编译Spring源码教程

 

IDEA编译Spring源码教程

   输入我们的模块名称,点击Finish即可。

IDEA编译Spring源码教程

   2.创建好模块之后,我们需要对gradle进行一下配置,添加spring依赖,就像是在maven的pom文件里添加依赖一样

1 implementation(project(":spring-context"))
2 implementation(project(":spring-core"))

如下图:

IDEA编译Spring源码教程

 3.编写测试类代码

  编写配置类代码,指定spring扫描bean的路径

1 package com.test;
2 
3 import org.springframework.context.annotation.ComponentScan;
4 import org.springframework.context.annotation.Configuration;
5 
6 @ComponentScan("com.test")
7 @Configuration
8 public class AppConfig { //扫描com.test下的所有bean
9 }

  编写一个service,可以被扫描到

 1 package com.test;
 2 
 3 import org.springframework.stereotype.Service;
 4 
 5 @Service
 6 public class TestService {
 7     
 8     public void helloWorld(){
 9         System.out.println("Hello World");
10     }
11     
12 }

  最后获取到这个bean,并调用bean的方法

 1 package com.test;
 2 
 3 import org.springframework.context.annotation.AnnotationConfigApplicationContext;
 4 
 5 public class Atest {
 6     
 7     public static void main(String[] args) {
 8         
 9         AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
11         
12         TestService testService = (TestService)context.getBean("testService");
13         testService.helloWorld();
14     }
15     
16 }

 运行我们的测试方法,输出以下结果:

IDEA编译Spring源码教程

   这就是测试的service中helloworld()方法输出的内容,说明我们的soring已经配置好了可以使用了。

  如果在运行时出现以下异常报错,说明我们的jdk版本过低,需要将IDEA中编译环境设置的高一点。

    IDEA编译Spring源码教程

 修改如下的配置,将IDEA的jdk版本还有编译级别都设置的高于java8 ,我这里用的是jdk11,所以设置成11。

IDEA编译Spring源码教程

 

IDEA编译Spring源码教程

 

IDEA编译Spring源码教程

 最后,也是最重要的一步,将setting中的编译级别改为11,就可以成功执行了。

IDEA编译Spring源码教程

 7.总结

   至此,整个spring源码编译过程已经完成。每个版本的spring源码对应的编译过程,都会出现各种各样的问题,大家只要按照官方文档、多搜搜资料就可以顺利解决问题了,如果大家编译过程中有什么问题,欢迎留言进行探讨。希望此文对大家学习sprig有所帮助。文章来源地址https://www.toymoban.com/news/detail-419395.html

到了这里,关于IDEA编译Spring源码教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IDEA 导入 spring 源码

    我们在学习 spring 源码的时候,有时候是需要在阅读源码的时候添加一些代码注释,或者是对源码的一些感悟,如果没有将 spring 的源码导入到 IDEA 中,单纯是通过 Maven 去阅读 jar 的形式是无法添加一些注释信息的,即便可以通过一些比如像 Private Notes 这样的插件做到在源代码

    2024年02月04日
    浏览(31)
  • Spring源码编译-for mac

    超详细的spring源码编译 记:编译成功时间:2023.08.19 环境准备: 1.idea 2023.1.1 Community Edition 2.jdk1.8 3.gradlegradle-5.6.4 4.spring源码(版本:spring-framework-v5.2.25.RELEASE) github 加速网站,速度快,有条件的可以去github下载。 https://gitcode.net/mirrors/spring-projects/spring-framework?utm_source=csdn_githu

    2024年02月11日
    浏览(41)
  • idea设置自动编译spring boot代码,idea代码修改后无须重启服务立即生效

    系统环境:windows 10 idea版本:IntelliJ IDEA 2022.2.3 (Ultimate Edition) springBoot版本:2.2.6.RELEASE 在Spring Boot开发应用程序时,需经常要进行频繁的代码修改和调试。 为了更好的提高开发效率,希望能够自动编译和热更新应用程序,以便我们在修改代码后无需手动多次进行重新启动应用

    2024年04月13日
    浏览(31)
  • 到了这个年纪,就应该阅读Spring源码了,源码阅读指南-编译加运行

    Spring的源码地址 https://github.com/spring-projects/spring-framework 我们先把他clone下来 没梯子的话多clone几遍就好了 我们这里使用5.x的版本 设置里面gradle设置按照如下图设置即可 😊gradle介绍(插叙手法) 由于Spring源码都是使用Gradle来管理项目 按理来说我们gradle和maven类似,需要在本

    2023年04月09日
    浏览(92)
  • IDEA+spring boot+mybatis+spring mvc+bootstrap+Mysql停车位管理系统源码

    随着时代和科技的进步,人们的生活水平越来越高,私家车的数量不断上涨,随之产生了一些问题,其中就包括停车难,很多地方人们根本找不到停车位,经常有司机为了找停车位转来转去,走了很多弯路,更重要的是浪费了大量的时间。 而停车场车位管理系统可以使司机清

    2024年02月12日
    浏览(44)
  • IDEA+Spring Boot + MyBatis + Layui+Mysql垃圾回收管理系统源码

    本系统实现了垃圾回收管理系统,管理端实现了管理员登录、垃圾回收管理、添加需要回收的垃圾、垃圾去向管理、申请需要打包运出的垃圾、系统公告管理、个人信息管理、修改密码 JDK版本:1.8 Mysql:5.7 账号:好贵啊 密码:123456 点击以下链接获取源码。 IDEA+Spring Boot + MyBati

    2024年02月13日
    浏览(46)
  • 在 IDEA 中创建 Spring Boot 项目的方式(详细步骤教程)

    以下是我的开发环境 JDK 1.8 Maven 3.6.3 IDEA 2019(2019 无所畏惧,即使现在已经 2023 年了哈哈哈) 下面的内容可能会因 IDEA 版本不同,而有些选项不同,但是大同小异。 点击 Create New Project 点击左边的 Maven,默认选择你的 JDK,然后点击 Next。 输入你的项目名称、存储位置、组等信

    2024年02月03日
    浏览(63)
  • Spring原码学习第一篇:Spring源码概述

    1、Spring获取对象的过程 2、Spring源码概述图: 2、一些重要的接口 BeanDefinition中实现的方法,把xml中定义的对象封装为一个对象,方便后面处理 4、BeandefinitionReader BeandefinitionReader 作为一个抽象层来处理配置文件,定义规范,方面扩展,如果再有其他格式的配置文件的话,直接

    2024年02月13日
    浏览(39)
  • spring源码学习

    1.xmlBeanFactory对defaultListableBeanFactory类进行扩展,主要用于从XML文档中获取BeanDefinition,对于注册及获取bean都是使用从父类DefaultListableBeanFactory继承的方法去实现。 xmlBeanFactory 主要是使用reader属性对资源文件进行读取和注册。 2.循环依赖。创建bean,核心方法 getBean → doGetBean →

    2024年02月06日
    浏览(25)
  • 集群部署项目时,Spring Task的坑大家一定要注意

    我们要在下面的代码中,实现每5秒钟执行一个打印信息的任务。 首先我们可以通过“Edit Configurations”,增加一个运行实例的配置。 接着启动项目的多个实例即可,如下图所示: 然后我们就可以查看上面代码的执行结果了,如下图: 通过对比执行结果,我们会发现,有两个

    2024年02月12日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包