一. Spring-FrameWork源码编译

一、编译环境

操作系统: windows 10 家庭版

Gradle版本:5.6.3

SpringFrameWork版本:5.1.19.RELEASE

IDE版本:IDEA 2018.2.6

JDK版本:1.8

二、 下载源码

从github上拉取Spring-Framework的最新源代码

git clone https://github.com/spring-projects/spring-framework.git

如果github无法访问,可以从gitee上拉取代码,gitee每天都会从github上更新一次代码。

git clone https://gitee.com/mirrors/Spring-Framework.git

因为我先编译的Spring-Boot的版本2.1.19.BUILD-SPNAPSHOT,所依赖的SpringFramework版本是5.1.19.RELEASE。因此需要对切换到5.1.x分支的5.1.19.RELEASE标签,同时创建一个自己的分支myspingframework(自己研究学习,与主分支区分开)。

git checkout -b myspringframework 5.1.19.RELEASE

三、 编译

我使用的是idea.2008。

1. 创建File -> new -> project from existing source

2. 选择gradle

3. 配置gradle路径和JDK版本,在编译的时候,我使用的gradle版本是gradle-5.6.3-all,jdk是1.8。

4. 完成导入

5. 执行编译命令

 gradlew :spring-oxm:compileTestJava

 gradlew :spring-beans:compileTestJava

6. 执行 gradlew build

7. 编译完成

8. 安装到本地maven仓库。

//5.1.x以上版本 不包含5.1.x使用 
//gradlew publishToMavenLocal -x api -x asciidoctor -x asciidoctorPdf 
//其中-x 为安装时忽略的模块,具体参照github上的wiki文档
//https://github.com/spring-projects/spring-framework/wiki/Build-from-Source

gradlew install -x javadoc

9.编译安装单独的项目

#先查看所有的task名称
gradles tasks --all

#找到对应的项目,这里以spring-context为例
gradlew spring-context:build 

#也可以根据.gradle文件进行编译
gradlew --build-file=./spring-context/spring-context.gradle 

#install指定项目
gradlew spring-context:install

四、编译过程中出现的问题

1. 出现could not resolve xxxxx / could not get resource xxxx / could not HEAD xxxx 401,一般是由于从仓库下载某个依赖出问题,此时需要对gradle仓库进行换源。按照网上查找资料,在换源的过程中,依然会出现这种问题,后来打开以来的仓库查找,发现不同的依赖会在不同的源中。下面是我使用的源,在build.gradle以及docs.gradle文件中。我在换完源之后,仍然会出现这些错误,但是当我在此编译之后,再次出现的错误就会消失,我的猜测是网络不稳定造成的结果。

repositories {
   mavenLocal()
   mavenCentral()
   maven { url "https://maven.aliyun.com/repository/spring" }
   maven { url 'https://maven.aliyun.com/repository/spring-plugin' }
   maven { url "https://maven.aliyun.com/repository/public" }
   maven { url "https://maven.aliyun.com/repository/gradle-plugin" }
   maven { url "https://maven.aliyun.com/nexus/content/groups/public/" }
   maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }
   maven { url "https://repo.spring.io/plugins-release" }
   maven { url "https://repo.springsource.org/plugins-release" }
   maven { url "https://plugins.gradle.org/m2/" }
}

2. 在执行编译的过程中,spring-core会出现cannot resolve symbol的错误,该错误主要集中在spring-core的cglib中。错误原因是springFramework依赖于springframwork包下的cglib,但是并没有提供在该包下提供cglib的源码。springframework在编译的时候会将下载的cglib转换到springframework包下。 

解决办法:

1) 执行命令

gradlew objenesisRepackJar
gradlew cglibRepackJar

2) 或者执行gradle的other下的cglibRepackJar和objenessisRepackJar

3. 出现asciidoctor (SystemCallError) Unknown error 123,是由于AsciidoctorJ的版本兼容性的问题,在windows系统上会出现此问题。这个问题搞了好久,百度上没有什么有用的解决方案,最后在github上springframework的issu上查到这个问题,跳转到asciidoctor项目中,才找到有效的解决方案。

解决办法:替换build.gradle,以及docs.gradle、spring-webmvc.gradle、 spring-webflux.gradle中的AsciidoctorJ和jruby版本(https://github.com/asciidoctor/asciidoctorj/issues/471)。下载的时候如果报https://maven.aliyun.com/repository/spring/../jruby/...无法下载的问题,在  docs.gradle文件中注释掉 https://maven.aliyun.com/repository/spring仓库,重新build

//build.gradle文件
......
//16行
dependencies {
   classpath("io.spring.gradle:propdeps-plugin:0.0.9.RELEASE")
   classpath("io.spring.gradle:docbook-reference-plugin:0.3.1")
   classpath("org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16")
   classpath("org.asciidoctor:asciidoctorj:1.6.0-alpha.6")
}
.......
//docs.gradle文件
......
//33行
dependencies {
    classpath("org.asciidoctor:asciidoctor-gradle-plugin:1.5.7") {
        exclude group: 'org.jruby'
    }
    classpath("org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16") {
        exclude group: 'org.jruby'
    }
    classpath 'org.jruby:jruby:9.1.17.0'
}

.....

//105行
asciidoctorj {
    version = '1.5.3'
}
......
//spring-webmvc.gradle文件
//77行
testRuntime("org.jruby:jruby:9.1.17.0")


//spring-webflux.gradle文件
//58行
testRuntime("org.jruby:jruby:9.1.17.0")

4. 出现[RightCurly]字样的错误,是由于对代码进行格式化或者修改了代码的格式(e.g:方法的注释,多出不必要的换行;if{}else{} try{}catch{}等else、catch等关键字不能写在}后面;等等),和配置文件中定义的格式不一致导致问题得到出现。最快解决办法还原当前出错的文件。

五、后记

经过两天的折腾,看到BUILD SUCCESS的字样,心里可算是舒了一口气。在编译过程中,遇到最大的问题就是jruby版本的问题(几乎所有的时间都花在了解决这个问题上),国内的各大论坛上的办法都试了一遍(其实也没查到几个),最后还是在github上找到了有效的解决办法。这就告诉我,遇到问题,还是要从源头去寻找。接下来就要开始spring源码学习的旅程了。加油。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用: "Failed to resolve imported Maven boms: Could not find org.springframework.cloud:spring-cloud-dependencies:2022.0.0-RC2." 这个错误提示是由于无法解析导入的Maven依赖所致。它说明在所搜索的位置中找不到org.springframework.cloud:spring-cloud-dependencies:2022.0.0-RC2的POM文件。你可以尝试通过指定其他可用的仓库来解决这个问题。 引用: 在你新建的spring模块的build.gradle中,添加compile(project(":spring-instrument")),这样可以解决报错"没有target相关的问题"。 引用: 另外,在build.gradle中,你还可以添加如下配置来解决问题:compile(project(":spring-context"))和compile(project(":spring-instrument"))。 对于你的问题 "Could not resolve org.springframework.boot:spring-boot-gradle-plugin:3.1.3",根据提供的信息,你遇到了无法解析org.springframework.boot:spring-boot-gradle-plugin:3.1.3的问题。这可能是因为该版本的插件在你所使用的仓库中不可用。 为了解决这个问题,你可以尝试以下几种方法: 1. 首先,确认你的项目的Gradle配置文件中是否正确指定了仓库地址,并且该仓库中包含了所需的插件。你可以查看你的build.gradle文件,并确保仓库地址正确。 2. 如果确认仓库地址正确无误,你可以尝试更新Gradle版本或者切换到其他可用版本的插件,以查看是否有可用的spring-boot-gradle-plugin插件。 3. 如果以上方法都没有解决问题,你可以尝试手动下载并安装所需的插件。你可以在Maven仓库或其他可靠的资库中搜索并下载org.springframework.boot:spring-boot-gradle-plugin:3.1.3,然后使用本地路径指定插件位置。 希望这些方法能够帮助你解决问题。如果问题仍然存在,请提供更多详细的错误信息或上下文,以便我们能够更好地帮助你解决。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Gradle编译失败问题汇总](https://blog.csdn.net/u010363836/article/details/128351899)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Spring码搭建教程](https://blog.csdn.net/shark_chili3007/article/details/111414731)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值