前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring框架源码分析之Spring源码编译

Spring框架源码分析之Spring源码编译

原创
作者头像
杨不易呀
修改2023-09-25 00:40:39
4680
修改2023-09-25 00:40:39
举报
文章被收录于专栏:杨不易呀杨不易呀

Spring 源码环境搭建

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

Gradle 下载地址:https://gradle.org/releases/

查看 Spring 源码中使用的 Gradle 版本,打开下载好的 Spring 源码解压,然后进入到如下图所示的目录当中:

image-20210928103325367
image-20210928103325367

打开 gradle-wrapper.properties 查看 Gradle 版本:

image-20210928103455530
image-20210928103455530

查看了 Spring 中使用的 Gradle 版本之后然后到 https://services.gradle.org/distributions/ 下载对应的 Gradle 版本

配置 Gradle 环境变量

右键 → 我的电脑 → 属性:

image-20210928132224293
image-20210928132224293
image-20210928135517487
image-20210928135517487

新建一个系统变量:GRADLE_HOME,变量值为 Gradle 的安装位置如下图:

image-20210928140353782
image-20210928140353782

新建完毕之后,紧接着在编辑 PATH 系统变量,在当中添加一个变量值如下图:

image-20210928140655526
image-20210928140655526
代码语言:text
复制
%GRADLE_HOME%\bin

验证 Gradle

打开终端输入如下命令即可:

代码语言:shell
复制
gradle -v
image-20210928141001406
image-20210928141001406

相关配置修改

修改 Gradle

找到如下目录:

image-20210928141248813
image-20210928141248813

修改如下内容,加快编译速度:

image-20210928141527064
image-20210928141527064
代码语言:text
复制
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=file:///D:/Develop/gradle-5.6.4-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

查看 idea 的 kotlin 版本,查看方式:File → Setting → Plugins,没有安装过的,需要进行安装:

image-20210928141731496
image-20210928141731496

修改 build.gradle 配置

找到目标文件:build.gradle 在根目录下:

image-20210928141940037
image-20210928141940037

注释 Gradle 企业约束:

image-20210928142042201
image-20210928142042201

添加阿里镜像

在此文件中搜索关键字:repositories 搜索后,添加如下内容:

image-20210928142159826
image-20210928142159826
代码语言:text
复制
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}

修改 settings.gradle 配置

找到目标文件:settings.gradle 在根目录下:

image-20210928142327030
image-20210928142327030

在 setting.gradle 中搜索关键字:pluginManagement 搜索后,添加如下内容:

image-20210928142440210
image-20210928142440210
代码语言:text
复制
maven { url "https://maven.aliyun.com/repository/public" }

修改 gradle.properties

找到目标文件:gradle.properties 在根目录下:

image-20210928150139423
image-20210928150139423
image-20210928150306201
image-20210928150306201
代码语言:text
复制
version=5.2.16.RELEASE
org.gradle.jvmargs=-Xmx2048M
org.gradle.caching=true
org.gradle.parallel=true
org.gradle.configureondemand=true
org.gradle.daemon=true

导入源码

依次点击 File → New → Project from Existing Sources,选择源码包路径下的 build.gradle 文件完成源码导入如下图:

image-20210928151206751
image-20210928151206751
image-20210928151316233
image-20210928151316233

idea 配置 gradle

依次点击:File → Setting → Build, Execution, Deployment → Build Tools → Gradle:

image-20210928151828753
image-20210928151828753

导入之后就等待&configure 成功即可🐤

Spring 预编译

先编译 spring-core 点击 idea 右边的侧边栏当中的 gradle 选择该模块,spring-core/Tashks/other/compileTestJava 如下图:

image-20210928165647454
image-20210928165647454

spring-core 编译了之后然后在按照我给了模块顺序依次全部编译一下,spring-oxmspring-contextspring-beans 编译了之后在 idea 当中按两下 Shift 搜索:ApplicationContext 查看 UML 图 ctrl + alt + shift + U 能够看到 UML 图,说明编译成功如下图:

image-20210928171206874
image-20210928171206874

构建自己的 spring-demo 工程

image-20210928190849620
image-20210928190849620
image-20210929113125236
image-20210929113125236
image-20210929113157408
image-20210929113157408

创建好了工程之后然后在依赖一个 spring-context 修改 Gradle 文件加入如下内容:

image-20210929131608562
image-20210929131608562
代码语言:text
复制
compile project(':spring-context')
testCompile group: 'junit', name: 'junit', version: '4.12'

紧接着创建几个类文件,还是以三层架构的方式进行分包最终的文件内容如下图所示:

image-20210929155540567
image-20210929155540567

UserService.java

代码语言:java
复制
/**
 * @author BNTang
 * @program spring
 * @date Created in 2021/9/29 029 11:39
 * @description
 **/
public interface UserService {
   /**
    * 显示
    */
   void show();
}

UserServiceImpl.java

代码语言:java
复制
/**
 * @author BNTang
 * @program spring
 * @date Created in 2021/9/29 029 11:40
 * @description
 **/
public class UserServiceImpl implements UserService {
   @Override
   public void show() {
      System.out.println("Hello Spring");
   }
}

SpringTest.java

代码语言:java
复制
/**
 * @author BNTang
 * @program spring
 * @date Created in 2021/9/29 029 11:42
 * @description
 **/
public class SpringTest {
   public static void main(String[] args) {
      AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();
      applicationContext.register(UserServiceImpl.class);
      applicationContext.refresh();
      UserService userService = applicationContext.getBean(UserService.class);
      userService.show();
   }
}

如上的内容创建完毕之后,然后直接运行即可效果如下图,出来了结果就代表已经编译成功了:

image-20210929160311987
image-20210929160311987

AspectJ 编译失败问题

如果遇到了可以按照我下方给出的步骤进行解决,AspectJ 下载地址:https://www.eclipse.org/aspectj/downloads.php 下载完毕之后找到下载的目录,使用 cmd 运行 jar 包命令如下:

代码语言:shell
复制
java -jar xxx.jar
image-20210928192309321
image-20210928192309321

运行下载好的 AspectJ.jar 如下:

代码语言:shell
复制
java -jar aspectj-1.9.6.jar
image-20210928192414191
image-20210928192414191

出现了如上界面之后一直下一步即可,第二个页面就是选择你所用的 JDK,其中有一个界面是说 aspectj 安装在那里,安装过程图我就不贴了,安装完毕了 AspectJ 之后然后在检查 idea 是否也安装了 AspectJ 插件如下图:

image-20211008145616772
image-20211008145616772

如上的内容都完毕了之后然后在进入到 Project Structure

image-20211008145816979
image-20211008145816979
image-20210929165247030
image-20210929165247030
image-20210929165333076
image-20210929165333076
image-20210929165358719
image-20210929165358719
image-20211008150146344
image-20211008150146344

最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spring 源码环境搭建
  • 配置 Gradle 环境变量
    • 验证 Gradle
    • 相关配置修改
      • 修改 Gradle
        • 修改 build.gradle 配置
          • 添加阿里镜像
            • 修改 settings.gradle 配置
              • 修改 gradle.properties
              • 导入源码
                • idea 配置 gradle
                • Spring 预编译
                • 构建自己的 spring-demo 工程
                • AspectJ 编译失败问题
                • 最后
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档