Spring 源码阅读环境的搭建

本贴最后更新于 1084 天前,其中的信息可能已经时异事殊

本着学习 Spring 源码的心态,但是其中还是出了很多问题。

1. Spring 源码下载指南

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

Spring 源码构建官方文档:https://github.com/spring-projects/spring-framework/wiki/Build-from-Source

1.1 开始之前

你的电脑需要安装 Git,JDK 8 update 262 or later.由于依赖 Java Flight Recorder(JFR)类型,因此需要更新 262 或更高版本。但是请注意,Oracle JDK 不包括 JFR 类型。 因此,我们建议包含 JFR 类型的 AdoptOpenJDK 发行版或类似发行版。 确保您的 JAVA_HOME 环境变量指向从 JDK 下载中提取的 jdk1.8.0 文件夹。

1.2 获取源码

直接通过 git clone 下载

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

这里最好不要下载指定分支,tag 的压缩包,类似这样

image.png

如果你说这样能不能构建,我的回答是可以的,但是可能会走一些弯路。

zip 发行版主要是用来共享源代码,但不一定用于构建它。

1.3 导入 IDEA

在将源码下载之后,先不要急着导入 IDEA,在项目根目录下,呼出 CMD 窗口,进行执行

./gradlew build

当提示 SUCCESS 之后,导入 IDEA 即可。

当导入 IDEA 之后,可以新建一个模块,尝试执行简单代码。

2. 报错的解决办法

2.1 Process 'command 'C:/Program Files/AdoptOpenJDK/jdk-8.0.282.8-hotspot/bin/java.exe'' finished with non-zero exit value 1

Execution failed for task ':runnable:SpringTest.main()'.
> Process 'command 'C:/Program Files/AdoptOpenJDK/jdk-8.0.282.8-hotspot/bin/java.exe'' finished with non-zero exit value 1

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

这个并不是环境没有搭建成功,而是代码的问题,先通过简单的 sout 看看能不能执行。

2.2 jdk.jfr.Category 没找到

报错图片

image.png

尝试更换 JDK 版本,我测试了 JDK8 以上都可以。比如 JDK15,JDK14,jdk-8.0.282.8-hotspot。

安装了新的 JDK 之后,在 IDEA 的 project structure 记得进行更换

image.png

image.png

2.3 gradle 构建 Spring 的时候提示主机连接不上

关闭电脑的个人热点。

image.png

2.4 报错提示乱码信息

类似这样

D:~\CustomAopBeanPostProcessor.java:11: ����: ����GBK�IJ���ӳ���ַ�
//		这里�?有bean都会处理,可以�?�过条件过滤指定bean处理
  		    ^

因为 Spring 项目的编码都是 GBK 编码,所以建议删除中文,然后重新运行。

已经尝试过强转 convert,但是没有效果,直接删除肯定没问题。

2.5 A build scan was not published as you have not authenticated with server 'ge.spring.io'.

Build scan background action failed.
org.gradle.process.internal.ExecException: Process 'command 'git'' finished with non-zero exit value 128
	at org.gradle.process.internal.DefaultExecHandle$ExecResultImpl.assertNormalExitValue(DefaultExecHandle.java:414)
	at org.gradle.process.internal.DefaultExecAction.execute(DefaultExecAction.java:38)
	at org.gradle.process.internal.DefaultExecActionFactory.exec(DefaultExecActionFactory.java:175)
	at io.spring.ge.conventions.gradle.WorkingDirectoryProcessOperations.exec(WorkingDirectoryProcessOperations.java:45)
	at io.spring.ge.conventions.gradle.ProcessOperationsProcessRunner.run(ProcessOperationsProcessRunner.java:41)
	at io.spring.ge.conventions.core.BuildScanConventions.run(BuildScanConventions.java:166)
	at io.spring.ge.conventions.core.BuildScanConventions.addGitMetadata(BuildScanConventions.java:113)
	at io.spring.ge.conventions.gradle.GradleConfigurableBuildScan.lambda$background$0(GradleConfigurableBuildScan.java:104)
	at com.gradle.enterprise.gradleplugin.internal.extension.DefaultBuildScanExtension$3.run(SourceFile:100)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)

A build scan was not published as you have not authenticated with server 'ge.spring.io'.

这个注释掉 setting.gradle 中的 ge.spring.io 就好了

image.png

3. 终极解决办法

我把我现在构建好的这个直接放在 git 上,供大家拉取下载。

地址:https://github.com/MingGH/spring-framework

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    938 引用 • 1456 回帖 • 171 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...