【Spring源码 】1.源码的下载与编译(by Gradle)

182 阅读3分钟

首先我们需要下载一套源码到本地

下载方式

  1. Git clone

安装了Git可以直接clone到本地

源码版本选择

本来直接clone的最新版本,但是一直报各种错,参考了官方说明才知道最新版本已经需要JDK17了(已哭晕...)

github.com/spring-proj…

我们如果还有想用JDK8,需要选择较前版本

查看GitHub的更新情况,最近的一个稳定版本是5.2.21.RELESE

GA即General Availability,表示正式发布的版本(国外通常用 GA 来标识 release 版本,GA 版本是开发团队认为该版本是稳定版(也有使用Stable/Production的),可以在生产环境中使用。

我这边使用的是JDK8,所以选择分支版本

git clone -b 5.2.x https://github.com/spring-projects/spring-framework.git
导入idea

选择Gradle工程

idea会自动加载,等他加载好

报错处理(未遇到,可跳过)

如果报了POM relocation to an other version number is not fully supported in Gradle : xml-apis:xml-apis:2.0.2 relocated to xml-apis:xml-apis:1.0.b2.的错

大致意思是需要将xml-apis:xml-apis的版本换为1.0.b2,在项目中全局搜索xml-apis

尝试在项目根目录下的build.gradle文件中添加如下代码,指定xml-apis的版本为1.0.b2

configurations.all {

 resolutionStrategy {

 force 'xml-apis:xml-apis1.0.b2'

    }

 }
重新加载

测试
新建module

按下图选择,然后next,起个名,完成~

修改配置

在新建module中的build.gradle中添加如下配置:

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

新建类

记得刷新gradle,然后新建文件(我这边建了一个启动类+一个配置类+一个实体类)进行测试

代码如下:

AqinApplication.java

package com.aqin;



import org.springframework.context.annotation.AnnotationConfigApplicationContext;



 /**

 *  @author aqin1012 AQin.

 *  @date 2022/4/18 4:16 PM

 *  @Version 1.0

 */

public class AqinApplication {

 public static void main ( String [] args ) {

 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext ( JavaConfig.class ) ;

      System.out.println ( context.getBean ( AqinEntity.class )) ;

   }

 }

AqinEntity.java

package com.aqin;



import org.springframework.stereotype.Component;



 /**

 *  @author aqin1012 AQin.

 *  @date 2022/4/18 4:17 PM

 *  @Version 1.0

 */

@Component

public class AqinEntity {

 String name;

   Integer age;

 }

JavaConfig.java

package com.aqin;



import org.springframework.context.annotation.ComponentScan;

import org.springframework.context.annotation.Configuration;



 /**

 *  @author aqin1012 AQin.

 *  @date 2022/4/18 5:00 PM

 *  @Version 1.0

 */

@Configuration

@ComponentScan ( "com.aqin" )

public class JavaConfig {

 }
查看测试结果

加上断点,debug进行测试,下图可以看到新建的实体类已经被spring容器加载进去啦,撒花🎉🎉🎉~~~

  1. 网页下载

下载地址:github.com/spring-proj…

下载需要的压缩版本即可,如果GitHub打不开可以clone我在gitee上用spring5源码的创建项目:gitee.com/aqin1012/sp…

常见报错通用处理方式

如果按照本文的所有版本仍出现了一些奇奇怪怪的报错,请检查以下三个地方

  1. 编译工具

1⃣️ 是否是自己本地gradle的路径

2⃣️ 默认都是Gradle,可尝试如图中选项配置

3⃣️ 选择Specified location,后面选择本地gradle的路径

4⃣️ 选择本地的1.8版本JDK

  1. 编译器

1⃣️ 选择1.8版本

  1. 项目结构

1⃣️ 选择本地安装的1.8版本JDK

2⃣️ 选择SDK 8

  1. JDK环境

查看本机安装的jdk版本

终端运行:

$ /usr/libexec/java_home -V

输出:

如果你电脑上安装了多个JDK版本,此处就都会显示出来,如果下载了我上传的源码安装包,按照本教程一步一步进行仍然报一些什么Kotlin之类的版本问题、或者诸如已经导入的文件找不到等问题,建议可以把除JDK8以外的版本卸载(移除/Library/Java/JavaVirtualMachines/目录下的该版本文件夹,前提确定好这个版本你有没有项目在用哈,,别轻易卸载导致后面忽然发现那个程序运行不起来就尴尬了= =)

这是最后的办法= =,我之前一直出一些乱七八糟的问题找不到解决方法的时候,就发现我除了JDK8还安装了JDK17,把17卸载了就一切正常(但是我其实是在.bash_profile做了多环境配置的,编译源码的时候也做了环境切换,但是不知道为什么还是会出问题,希望了解原因的同学可以指点下,谢谢>>>抱拳.gif)

Matching Java Virtual Machines (1):

    1.8.0_311 (x86_64) "Oracle Corporation" - "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0_311.jdk/Contents/Home