当前位置:首页 » 《随便一记》 » 正文

手把手教你 编译 spring 源码(2021 最新版)_Schudon

1 人参与  2022年05月12日 10:52  分类 : 《随便一记》  评论

点击全文阅读


目录

    • 1. 项目克隆
    • 2. 下载gradle
    • 3. 更改spring在项目中gradle下载位置
    • 4. 阿里云配置
    • 5. 命令行运行 gradlew.bat
    • 6. 导入idea预编译
    • 7. 正式导入idea(要导好一会儿)
    • 8. 改用idea构建,主要为了提速
    • 9. 新建测试模块
    • 10. 为自己的模块添加spring依赖
    • 11. 创建自己的测试类
    • 总结:
    • 参考:

版本说明:

  • JDK:11
  • Springframework:5.1.X
  • Gradle:6.5.1

1. 项目克隆

# github 版
git clone -b 5.1.x https://github.com/Xudongenen/spring-framework.git
# 国内镜像(本文采用的)
git clone -b 5.1.x https://gitee.com/mirrors/Spring-Framework.git

2. 下载gradle

 https://services.gradle.org/distributions/gradle-6.5.1-bin.zip

3. 更改spring在项目中gradle下载位置

# 改动文件地址 Spring-Framework\gradle\wrapper\gradle-wrapper.properties
# 将其中gradle下载地址改为我们下好的目录,他就会不去下载直接用了,如下图所示:

更改获取位置

4. 阿里云配置

修改bulid.gradle文件, 注意加在了哪,可以用“ mavenCentral()”定位一下

repositories {
    mavenCentral()
    maven { url "https://repo.spring.io/libs-spring-framework-build" }
    maven { url "https://repo.spring.io/snapshot" }
    maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'}
    maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
  }

阿里源

5. 命令行运行 gradlew.bat

成功的结果如下:

成功运行

失败结果如下:
失败运行

我当时是报了如下错误:
错误信息: Could not initialize class org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSetKt
解决方案: 在 Spring-Framework\build.gradle 中修改kotlin版本,共两处:

# 第一处:
plugins {
  id "io.spring.dependency-management" version "1.0.7.RELEASE" apply false
  id "org.jetbrains.kotlin.jvm" version "1.3.61" apply false //这里!!!!
  id "org.jetbrains.dokka" version "0.9.18"
  id "org.asciidoctor.convert" version "1.5.8"
}
# 第二处:
kotlinVersion        = "1.3.61"  //这里!!!!

6. 导入idea预编译

# 命令行执行
gradlew :spring-oxm:compileTestJava

成功之后如图:
成功运行

当然了事情并不是一帆风顺,我出现了以下错误:

错误信息:
org.gradle.api.CircularReferenceException: Circular dependency between the following tasks:
:spring-beans:compileGroovy
— :spring-beans:compileJava
— :spring-beans:compileKotlin
— :spring-beans:compileGroovy (*)**

解决方案: 更改 Spring-Framework\spring-beans\spring-beans.gradle 文件,方法如下:

  1. 在文件最后注释掉下面三行代码
// def deps = compileGroovy.taskDependencies.immutableValues + compileGroovy.taskDependencies.mutableValues
// compileGroovy.dependsOn = deps - "compileJava"
// compileKotlin.dependsOn(compileGroovy)
  1. 添加如下代码
tasks.named('compileGroovy') {
    // Groovy only needs the declared dependencies (and not the result of Java compilation)
    classpath = sourceSets.main.compileClasspath
}
tasks.named('compileKotlin') {
    // Kotlin also depends on the result of Groovy compilation
    classpath += files(sourceSets.main.groovy.classesDirectory)
}

7. 正式导入idea(要导好一会儿)

导入idea

8. 改用idea构建,主要为了提速

idea构建

9. 新建测试模块

  • 新建模块
    新建模块

  • 选择gradle构建
    新建模块

  • 起名字
    新建模块

10. 为自己的模块添加spring依赖

找到我们自己建的模块中的gradle.bulid
添加依赖

加入如下代码:

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

添加依赖

11. 创建自己的测试类

我的文件目录是这样的:
目录结构

其中涉及到的三个文件如下:

// MyConfig.java 文件
package com.zxd;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.zxd")
public class MyConfig {}

// MyService.java 文件
package com.zxd;
import org.springframework.stereotype.Component;
@Componentpublic 
class MyService {}

// MyTest.java 文件
import com.zxd.MyConfig;
import com.zxd.MyService;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MyTest {      
    public static void main(String[] args) {            
        AnnotationConfigApplicationContext annotationConfigApplicationContext = 
                                                                new AnnotationConfigApplicationContext (MyConfig.class);            
        System.out.println(annotationConfigApplicationContext.getBean(MyService.class));      
    }
}

运行MyTest类成功便会得到如下结果:
测试成功

但事情往往不会那么顺利,我就遇到了以下两个问题:

错误信息1: Kotlin: Language version 1.1 is no longer supported; please, use version 1.2 or greater.
Errors occurred while compiling module ‘spring.spring-beans.main’

解决方案: 我们需要找到对应报错模块,改变他的Kotlin版本,在这里我改成了 1.4 稳定版,遇到类似问题也是同样的解决办法,如图所示。
错误1

错误信息2:
D:\java\Spring-Framework\spring-context\src\main\java\org\springframework\context\weaving\DefaultContextLoadTimeWeaver.java:26:38
java: 找不到符号
符号: 类 InstrumentationSavingAgent
位置: 程序包 org.springframework.instrument

解决方案: 通过查看报错信息,我们知道了,编译器没有找到对应的InstrumentationSavingAgent类,我们到这个类所在的模块 spring-instrument 的 out 文件中发现没有这个类,所以我们需要通过手动运行test类将它们编译出来,具体如图所示。
错误二

总结:

终于,我们可以运行spring源码了,过程不难,遇到问题不要慌,版本问题一定要细致,如果是第一次装最好先和我的版本保持一致,轻车熟路之后再换呗~
大家如果有啥问题可以留言哦,没问题我们就一起开始学源码了,大家加油啊!!!

参考:

Build from Source


点击全文阅读


本文链接:http://www.zhangshiyu.com/post/39969.html

文件  自己的  模块  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 「拯救师尊清白计划」节选推荐_「师尊小师弟佩剑」小说精彩节选推荐
  • 「瘦马」反转剧情碎片化试读_赵秉岐太久布满后续全文免费阅读
  • 为赚彩礼钱,母亲逼我结了十次婚全章节免费阅读_[程沥宾客权威]反转剧情碎片化试读
  • 夫君放纵嫡妹将我送给皇上后,他悔疯了后续完结版_「赵君泽公公王府」章节试读
  • 重回七零,她当起了垃圾场临时工结局+番外(阮木兰魏哲)_(重回七零,她当起了垃圾场临时工结局+番外)阮木兰魏哲列表_笔趣阁(阮木兰魏哲)
  • 全书浏览恰似星河落满天在线品鉴(温其洲阮向竹)_恰似星河落满天在线品鉴(温其洲阮向竹)全书结局
  • 全文未见却思量+后续+结局(纪暖喻淮洲)列表_未见却思量+后续+结局
  • 「重生七零,打脸抛妻弃子的医生丈夫」小说章节免费试读_[老公继姐]全文+后续
  • 桃之夭夭灼灼其华(秦夭夭裴时安)_(桃之夭夭灼灼其华免费)秦夭夭裴时安免费列表(秦夭夭裴时安)
  • 神女老婆,却在背地承欢作乐每日分享(顾尘傅雅宁),神女老婆,却在背地承欢作乐每日分享
  • 恰似星河落满天全书+完结+后续(温其洲阮向竹)_(恰似星河落满天全书+完结+后续)恰似星河落满天全书+完结+后续列表_笔趣阁(温其洲阮向竹)
  • 「被逼着捐肾后,我死遁了」小说章节试读_[傅砚寒夏夏温柔]最新章节目录番外+全文

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1