spring 5.3.9编译成功!

学下下spring,不看源码学的程度可能还是差点意思,而学源码,最好是吧源码下载下来自己编译,这样可以添加注释,方便自己理清思路。否则,虽然也能反编译看到源码,但是只有只读权限,没有记录的话,看起来不方便!

编译源码,搞了两天。这里主要是给自己记录下编译思路。仅供大家参考。为什么是参考呢。因为spring每个版本都不同,需要的编译环境也不同,差一点也不行!除非你对编译工具特别熟悉!

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

  这里需要上github下载,在main->branches选择想要下载的版本。如果因为网络问题打不开,可能需要FQ之类的,这里我也帮不了你!

打不开 github网站的办法:如果你可以FQ,请忽略

  我这里有一个下载连接:https://codeload.github.com/spring-projects/spring-framework/zip/refs/tags/v5.3.9 

  如果你知道你想要下载的版本号,可以直接建立下载。我就是在这么干的,因为我家里网也不好。也就是把 v5.3.9 版本号部分 换成你想要下载的版本号,

    比如下载 5.3.28 的版本 地址就是:https://codeload.github.com/spring-projects/spring-framework/zip/refs/tags/v5.3.28

  当然这种根据版本号推测下载地址的办法很无奈,如果你网好,那就不用这么麻烦了。而且这种办法不保证在将来的日子里这个连接不会变,还能下载到,这里只是个下载思路的参考

 

  有可能你连 github 网站都登录不上,我就是这样,我这里的解决方案是下载了个工具,easy-hosts-master.zip

  下载地址:https://gitee.com/xiaoyutou_647/easy-hosts/repository/blazearchive/master.zip?Expires=1688045211&Signature=s522okpm09UT096VPf9Ujjiul3mZog8OilKs0cxfsnU%3D

  不需要安装,在解压目录的:HostsEditor\bin\Debug 路径下有个工具 HostsEditor.exe ,这个工具会处理 C:\Windows\System32\drivers\etc 路径下的 hosts hosts.bak 文件,搜索关于 github 的相关路径,

  当然,如果你的 hosts 和 hosts.bak 有权限问题的话,还要解决下权限问题,不然 HostsEditor.exe 也无法写入内容

    解决办法就是本分下这两个文件,用 记事本打开文件,另存为 选在 保存类型选 所有文件(*) ,覆盖原来的文件,在用 HostsEditor.exe 处理一下,会发现hosts 和 hosts.bak 里的内容多了好多

    修改hosts 和 hosts.bak 文件只能让打开 github网站更方便些,不能解决下载源码问题,但是看看文档之类的还行

  

gradle下载:https://services.gradle.org/distributions/

  这个地址,感觉版本不全,如果找不到对应的版本,我这里也提供下下载地址 :https://downloads.gradle.org/distributions/gradle-6.8.3-bin.zip

  然后你自己去修改你想要下载的 gradle-x.x.x-bin.zip 的版本号部分吧。

  下载后直接解压就行

  配置环境变量:gradle-repository自己建立的gradle仓库,类似maven

    GRADLE_HOME = D:\Program Files (x86)\gradle-6.8.3

    GRADLE_USER_HOME = D:\Program Files (x86)\gradle-repository

    dos下查看配置生效:>gradle -v

重点:

  spring-framework  的运行需要的jdk版本要求很宽泛,以下是搜的,我的误区就是以为 jdk版本只要在这个区间范文内,就可以编译,结果幼稚了!

    

Spring Framework版本JDK版本
6.0.x JDK 17-21
5.3.x JDK 8-19
5.2.x JDK 8-15
5.1.x JDK 8-12
5.0.x JDK 8-10
4.3.x JDK 6-8

  我想编译5.3.9的spring版本,用的 jdk17 应该没问题吧,结果报错如下  

Unsupported Java. 
Your build is currently configured to use Java 17.0.3 and Gradle 6.8.3.

Possible solution:
 - Use Java 15 as Gradle JVM: Open Gradle settings 
 - Upgrade Gradle wrapper to 7.2 version and re-import the project

  

Gradle 6.8.3要用jdk15, 现在是jdk17,提示让把gradle升级到7.2版本,能升吗,不能,因为spring,指定了Gradle 的编译版本,如下:

  spring-framework 源码目录的 spring-framework-5.3.9\gradle\wrapper 下的 gradle-wrapper.properties 里配置了编译此版本的spring需要用到的 gradle 版本

  它的原始配置 distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip 是这样,需要编译的时候下载 gradle.我们提前下载好了 gradle

  就需要改成 distributionUrl=file:///g:/tool/gradle-6.8.3-bin.zip  注意这里是下载的gradle-6.8.3-bin.zip所在位置,不是你解压的路径

那么现在看来,只要吧jdk 降为jdk15应该就都满足了!我觉得是,但是我没那么做,我本地的jdk已经有 jdk1.8   jdk11   jdk17 三个版本了

于是我直接吧gradle所用的jdk版本指定为jdk11了,报错解决;一下我会贴上我的配置截图,仅供参考

  1.修改spring-framework-5.3.9\gradle 下的 docs.gradle 注释掉了 dokka 方法asciidoctor 方法修改  task schemaZip    

    task schemaZip修改部分    

    META-INF/spring.schemas  改为:META-INF\\spring.schemas

    it.path.endsWith(schemas.get(key))  改为:it.path.endsWith(schemas.get(key).replaceAll('\\/','\\\\'))

    注意不同的版本,这三处方法,可能不同甚至没有,修改不修改的作用未知,并未做验证,仅供参考

  2.build.gradle 添加下载镜像

 

maven { url "https://maven.aliyun.com/repository/central" }//阿里云 国内镜像
maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'} //阿里云 国内镜像
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}//阿里云 国内镜像

 

3.settings.gradle 添加下载镜像:

maven { url "https://maven.aliyun.com/repository/spring-plugin" }//添加镜像

4.修改默认gradle为本地gradle

5.项目编码修改

6项目配置jdk17

7指定gradle所用jdk版本,统一用jdk17会如上报错

8 项目导入成功后,先编译oxm 模块core模块,这个在文件中已经说明

9.最后整体编译

10.gradle为啥非要用jdk15,我指定了jdk11 也能通过的一些蛛丝马迹

 

总结:如果想统一jdk,我这个spring5.3.9的版本应该用jdk15看来最合适。大家可以试一下。这篇文章只是记录下解决问题的思路,希望大家少走弯路。

最后再提一下,此文章编译通过的版本是 springFramwork5.3.9版本,笔者用的jdk17gradle-6.8.3(依赖jdk11) ,但最稳妥应该统一用jdk15才合适

若是其他的spring版本,可能还会有些不同,此处仅提供一下编译思路上的参考,若有什么不周到的地方,请大家留言指教

新建个测试模块

  新建-新模块-构建系统选gradle,添加依赖 添加依赖后刷新一下 gradle 和 maven 类似

  

代码:

复制代码
@Configuration
@ComponentScan("com.cyf.test")
public class MyConfig {

}

@Service
public class UserService {
}

public class TestApplication {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext(MyConfig.class);
        UserService bean = annotationConfigApplicationContext.getBean(UserService.class);
        System.out.println(bean);
    }
}
复制代码

 断点调试,添加源码注释的目标至此达成

 

 

 

posted @   花开如梦  阅读(243)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示