本着学习 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 的压缩包,类似这样
如果你说这样能不能构建,我的回答是可以的,但是可能会走一些弯路。
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 没找到
报错图片
尝试更换 JDK 版本,我测试了 JDK8 以上都可以。比如 JDK15,JDK14,jdk-8.0.282.8-hotspot。
安装了新的 JDK 之后,在 IDEA 的 project structure 记得进行更换
2.3 gradle 构建 Spring 的时候提示主机连接不上
关闭电脑的个人热点。
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 就好了
3. 终极解决办法
我把我现在构建好的这个直接放在 git 上,供大家拉取下载。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于