环境准备下载源码 下载地址:https:github。comspringprojectsspringframeworktreev6。0。3 选择版本: 选择spring源码版本 选择压缩包下载,直接通过gitclonehttp地址下载比较慢,直接下载压缩包。 下载spring源码zip包 解压源码压缩包 spring源码目录结构 查看gradle对应版本,查看目录gradlewrapper。properties文件(gradlewrappergradlewrapper。properties) 修改wrapper。properties配置文件 查看当前spring源码版本,所依赖的gradle版本 spring源码依赖的gradle环境准备 Java环境:jdk17 Gradle环境:gradle7。6bin。zip 下载gradle,下载地址:https:gradle。orgreleases,选择上面spring框架依赖的版本 下载gradle 解压gradle 解压后的gradle 配置环境变量,执行命令vim。bashprofile 环境变量中添加gradle配置 使配置生效,执行:source。bashprofile 查看gradle版本 查看gradle版本 修改镜像源 修改gradle镜像源 在build。gradle中添加阿里云镜像。 修改成阿里云镜像源 修改settings。gradle中的阿里云镜像 修改setting。gradle 修改settings。gradle阿里云仓库镜像配置 修改成阿里镜像源maven{urlhttps:maven。aliyun。comrepositorypublic}阿里云镜像仓库编译源码 在项目根目录,进行预编译,。gradlew:springoxm:compileTestJava 编辑源码 编译中,编译需要一段时间。 源码编译中 编译完成 源码编译完成需要注意的配置preferencesgradle配置 修改idea中gradle配置Projectstructureproject 修改idea中Projectstructure配置ProjectstructureModules 修改idea中Projectstructure配置特别需要注意的配置文件根目录settings。gradlepluginManagement{repositories{maven{urlhttps:maven。aliyun。comrepositorygradleplugin}maven{urlhttps:maven。aliyun。comrepositoryspringplugin}maven{urlhttps:maven。aliyun。comrepositorypublic}阿里云镜像仓库mavenCentral()gradlePluginPortal()maven{urlhttps:repo。spring。iorelease}}}plugins{idcom。gradle。enterpriseversion3。11。1idio。spring。ge。conventionsversion0。0。7}includespringaopincludespringaspectsincludespringbeansincludespringcontextincludespringcontextindexerincludespringcontextsupportincludespringcoreincludespringcoretestincludespringexpressionincludespringinstrumentincludespringjclincludespringjdbcincludespringjmsincludespringmessagingincludespringormincludespringoxmincludespringr2dbcincludespringtestincludespringtxincludespringwebincludespringwebfluxincludespringwebmvcincludespringwebsocketincludeframeworkbomincludeframeworkdocsincludeframeworkplatformincludeintegrationtestsrootProject。namespringrootProject。children。each{projectproject。buildFileName{project。name}。gradle}settings。gradle。projectsLoaded{gradleEnterprise{buildScan{FilebuildDirsettings。gradle。rootProject。getBuildDir()buildDir。mkdirs()newFile(buildDir,buildscanuri。txt)。text(buildscannotgenerated)buildScanPublished{scanif(buildDir。exists()){newFile(buildDir,buildscanuri。txt)。text{scan。buildScanUri}}}}}}includespringrenjie001includespringrenjie002根目录下build。gradleplugins{idio。spring。nohttpversion0。0。10idio。freefair。aspectjversion6。5。0。3applyfalsekotlinVersionismanagedingradle。propertiesidorg。jetbrains。kotlin。plugin。serializationversion{kotlinVersion}applyfalseidorg。jetbrains。dokkaversion1。7。20idorg。asciidoctor。jvm。convertversion3。3。2applyfalseidorg。asciidoctor。jvm。pdfversion3。3。2applyfalseidorg。unbrokendome。xjcversion2。0。0applyfalseidcom。github。benmanes。versionsversion0。42。0idcom。github。johnrengelman。shadowversion7。1。2applyfalseidde。undercouch。downloadversion5。1。0idme。champeau。jmhversion0。6。8applyfalse}ext{moduleProjectssubprojects。findAll{it。name。startsWith(spring)}javaProjectssubprojectsproject(:frameworkbom)project(:frameworkplatform)}configure(allprojects){projectrepositories{maven{urlhttps:maven。aliyun。comnexuscontentgroupspublic}maven{urlhttps:maven。aliyun。comrepositorypublic}maven{urlhttps:maven。aliyun。comrepositorygoogle}maven{urlhttps:maven。aliyun。comrepositoryspring}maven{urlhttps:maven。aliyun。comnexuscontentrepositoriesjcenter}}configurations。all{resolutionStrategy{cacheChangingModulesFor0,secondscacheDynamicVersionsFor0,seconds}}}configure(〔rootProject〕javaProjects){projectgrouporg。springframeworkapplyplugin:javaapplyplugin:javatestfixturesapplyplugin:checkstyleapplyplugin:org。springframework。build。conventionsapplyfrom:{rootDir}gradletoolchains。gradleapplyfrom:{rootDir}gradleide。gradleconfigurations{dependencyManagement{canBeConsumedfalsecanBeResolvedfalsevisiblefalse}matching{it。name。endsWith(Classpath)}。all{it。extendsFrom(dependencyManagement)}}test{useJUnitPlatform()include(〔Tests。class,Test。class〕)systemProperty(java。awt。headless,true)systemProperty(testGroups,project。properties。get(testGroups))systemProperty(io。netty。leakDetection。level,paranoid)systemProperty(io。netty5。leakDetectionLevel,paranoid)systemProperty(io。netty5。leakDetection。targetRecords,32)systemProperty(io。netty5。buffer。lifecycleTracingEnabled,true)systemProperty(io。netty5。buffer。leakDetectionEnabled,true)jvmArgs(〔addopensjava。basejava。langALLUNNAMED,addopensjava。basejava。utilALLUNNAMED〕)}checkstyle{toolVersion10。5。0configDirectory。set(rootProject。file(srccheckstyle))}tasks。named(checkstyleMain)。configure{maxHeapSize1g}tasks。named(checkstyleTest)。configure{maxHeapSize1g}dependencies{dependencyManagement(enforcedPlatform(dependencies。project(path::frameworkplatform)))testImplementation(org。junit。jupiter:junitjupiterapi)testImplementation(org。junit。jupiter:junitjupiterparams)testImplementation(org。junit。platform:junitplatformsuiteapi)testImplementation(org。mockito:mockitocore)testImplementation(org。mockito:mockitojunitjupiter)testImplementation(io。mockk:mockk)testImplementation(org。assertj:assertjcore)PullinthelatestJUnit5LauncherAPItoensurepropersupportinIDEs。testRuntimeOnly(org。junit。jupiter:junitjupiterengine)testRuntimeOnly(org。junit。platform:junitplatformlauncher)testRuntimeOnly(org。junit。platform:junitplatformsuiteengine)testRuntimeOnly(org。apache。logging。log4j:log4jcore)testRuntimeOnly(org。apache。logging。log4j:log4jjul)testRuntimeOnly(org。apache。logging。log4j:log4jslf4jimpl)JSR305onlyusedfornonrequiredmetaannotationscompileOnly(com。google。code。findbugs:jsr305)testCompileOnly(com。google。code。findbugs:jsr305)checkstyle(io。spring。javaformat:springjavaformatcheckstyle:0。0。31)}ext。javadocLinks〔https:docs。oracle。comenjavajavase17docsapi,https:jakarta。eespecificationsplatform9apidocs,https:docs。oracle。comcdE1322201wlsdocs90javadocs,CommonJhttps:www。ibm。comdocsapiv1contentSSEQTP8。5。5com。ibm。websphere。javadoc。docwebapidocs,https:docs。jboss。orgjbossasjavadoc4。0。5connector,https:docs。jboss。orgjbossasjavadoc7。1。2。Final,https:www。eclipse。orgaspectjdocreleasedaspectj5rtapi,https:www。quartzscheduler。orgapi2。3。0,https:fasterxml。github。iojacksoncorejavadoc2。10,https:fasterxml。github。iojacksondatabindjavadoc2。10,https:fasterxml。github。iojacksondataformatxmljavadoc2。10,https:hc。apache。orghttpcomponentsclient5。2。xcurrenthttpclient5apidocs,https:projectreactor。iodocstestreleaseapi,https:junit。orgjunit4javadoc4。13。2,TODOUncommentlinktoJUnit5docsoncewehavesortedoutthefollowingwarninginthebuild。warning:Thecodebeingdocumentedusespackagesintheunnamedmodule,butthepackagesdefinedinhttps:junit。orgjunit5docs5。9。1apiareinnamedmodules。https:junit。orgjunit5docs5。9。1api,https:www。reactivestreams。orgreactivestreams1。0。3javadoc,https:javadoc。iostaticio。rsocketrsocketcore1。1。1,https:r2dbc。iospec1。0。0。RELEASEapi,TheexternalJavadoclinkforJSR305mustcomelasttoensurethattypesfromJSR250(suchasPostConstruct)arestillsupported。ThisisduetothefactthatJSR250andJSR305bothdefinetypesinjavax。annotation,whichresultsinasplitpackage,andthejavadoctooldoesnotsupportsplitpackagesacrossmultipleexternalJavadocsites。https:www。javadoc。iodoccom。google。code。findbugsjsr3053。0。2〕asString〔〕}configure(moduleProjects){projectapplyfrom:{rootDir}gradlespringmodule。gradle}configure(rootProject){descriptionSpringFrameworkapplyplugin:io。spring。nohttpapplyplugin:org。springframework。build。apidiffnohttp{source。excludetestoutputallowlistFileproject。file(srcnohttpallowlist。lines)defrootPathfile(rootDir)。toPath()defprojectDirsallprojects。collect{it。projectDir}{rootDir}buildSrcprojectDirs。forEach{dir〔bin,build,out,。settings〕。collect{rootPath。relativize(newFile(dir,it)。toPath())}。forEach{source。excludeit}〔。classpath,。project〕。collect{rootPath。relativize(newFile(dir,it)。toPath())}。forEach{source。excludeit}}}tasks。named(checkstyleNohttp)。configure{maxHeapSize1g}}gradlewrappergradlewrapper。propertiesdistributionBaseGRADLEUSERHOMEdistributionPathwrapperdistsdistributionUrlfile:UsersxxxDownloadsgradle7。6bin。zipnetworkTimeout10000zipStoreBaseGRADLEUSERHOMEzipStorePathwrapperdists阅读源码新建模块 新建测试模块添加配置 添加本地spring源码依赖plugins{idjava}grouporg。springframeworkversion6。0。3repositories{mavenCentral()}dependencies{testImplementationorg。junit。jupiter:junitjupiterapi:5。8。1testRuntimeOnlyorg。junit。jupiter:junitjupiterengine:5。8。1api(project(:springcontext))api(project(:springinstrument))}test{useJUnitPlatform()}文件目录 项目结构添加类文件packagecom。renjie;importorg。springframework。context。ApplicationContext;importorg。springframework。context。support。ClassPathXmlApplicationContext;Author:renjiecreateTime:2022年12月29日10:58:40publicclassMyApplication{publicstaticvoidmain(String〔〕args){ApplicationContextcontextnewClassPathXmlApplicationContext(springbean。xml);Useruser(User)context。getBean(user);System。out。println(user。toString());}}packagecom。renjie;Author:renjiecreateTime:2022年12月29日11:02:04publicclassUser{privateStringname;privateStringage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this。namename;}publicStringgetAge(){returnage;}publicvoidsetAge(Stringage){this。ageage;}OverridepublicStringtoString(){returnUser{namename,ageage};}}添加配置文件lt;?xmlversion1。0encodingUTF8?beansxmlnshttp:www。springframework。orgschemabeansxmlns:xsihttp:www。w3。org2001XMLSchemainstancexsi:schemaLocationhttp:www。springframework。orgschemabeanshttp:www。springframework。orgschemabeansspringbeans。xsdbeaniduserclasscom。renjie。Userpropertynameagevalue22propertynamenamevalue小明beanbeans运行结果 新模块运行结果编辑遇到的错误问题一:版本不存在StartingaGradleDaemon(subsequentbuildswillbefaster)FAILURE:Buildfailedwithanexception。Where:SettingsfileUsersxxxxDownloadsspringframework6。0。3settings。gradleline:12Whatwentwrong:Plugin〔id:io。spring。ge。conventions,version:0。0。11〕wasnotfoundinanyofthefollowingsources:GradleCorePlugins(pluginisnotinorg。gradlenamespace)PluginRepositories(couldnotresolvepluginartifactio。spring。ge。conventions:io。spring。ge。conventions。gradle。plugin:0。0。11)Searchedinthefollowingrepositories:maven(https:maven。aliyun。comrepositorypublic)MavenRepoGradleCentralPluginRepositoryTry:Runwithstacktraceoptiontogetthestacktrace。Runwithinfoordebugoptiontogetmorelogoutput。Runwithscantogetfullinsights。Getmorehelpathttps:help。gradle。orgBUILDFAILEDin38s io。spring。ge。conventions的0。0。11版本并不存在,修改成0。0。7 修改版本 修改版本问题二:代码未上传代码仓库fatal:notagitrepository(oranyoftheparentdirectories):。gitTask:buildSrc:compileJavaFAILEDUsersxxxDownloadsspringframework6。0。3buildSrcsrcmainjavaorgspringframeworkbuildKotlinConventions。java:44:错误:找不到符号freeCompilerArgs。addAll(List。of(Xsuppressversionwarnings,Xjsr305strict,optinkotlin。RequiresOptIn));符号:方法of(java。lang。String,java。lang。String,java。lang。String)位置:接口java。util。List1个错误FAILURE:Buildfailedwithanexception。Whatwentwrong:Executionfailedfortask:buildSrc:compileJava。Compilationfailed;seethecompilererroroutputfordetails。Try:Runwithstacktraceoptiontogetthestacktrace。Runwithinfoordebugoptiontogetmorelogoutput。Getmorehelpathttps:help。gradle。orgBUILDFAILEDin2s1actionabletask:1executedBuildscanbackgroundactionfailed。org。gradle。process。internal。ExecException:Processcommandgitfinishedwithnonzeroexitvalue128atorg。gradle。process。internal。DefaultExecHandleExecResultImpl。assertNormalExitValue(DefaultExecHandle。java:415)atorg。gradle。process。internal。DefaultExecAction。execute(DefaultExecAction。java:38)atorg。gradle。process。internal。DefaultExecActionFactory。exec(DefaultExecActionFactory。java:202)atio。spring。ge。conventions。gradle。WorkingDirectoryProcessOperations。exec(WorkingDirectoryProcessOperations。java:45)atio。spring。ge。conventions。gradle。ProcessOperationsProcessRunner。run(ProcessOperationsProcessRunner。java:41)atio。spring。ge。conventions。core。BuildScanConventions。run(BuildScanConventions。java:166)atio。spring。ge。conventions。core。BuildScanConventions。addGitMetadata(BuildScanConventions。java:113)atio。spring。ge。conventions。gradle。GradleConfigurableBuildScan。lambdabackground0(GradleConfigurableBuildScan。java:104)atcom。gradle。enterprise。gradleplugin。internal。extension。a4。run(SourceFile:174)atjava。util。concurrent。ExecutorsRunnableAdapter。call(Executors。java:511)atjava。util。concurrent。FutureTask。run(FutureTask。java:266)atjava。util。concurrent。ThreadPoolExecutor。runWorker(ThreadPoolExecutor。java:1149)atjava。util。concurrent。ThreadPoolExecutorWorker。run(ThreadPoolExecutor。java:624)atjava。lang。Thread。run(Thread。java:748)Abuildscanwasnotpublishedasyouhavenotauthenticatedwithserverge。spring。io。Formoreinformation,pleaseseehttps:gradle。comhelpgradleauthenticatingwithgradleenterprise。 异常一: org。gradle。process。internal。ExecException:Processcommandgitfinishedwithnonzeroexitvalue128,错误是由于下载下来的源代码没有放到git仓库中,将代码放到在即的git仓库就行。 异常二: Abuildscanwasnotpublishedasyouhavenotauthenticatedwithserverge。spring。io。不做身份验证,注释对应包 注释问题三:jdk版本不一致,spring6。0以上需要jdk版本为17 添加本地jdk17版本的jdk buildKotlinConventions。java:44:错误:找不到符号 参考:https:www。cnblogs。comhaoxianruip16975079。html 问题三:StartingaGradleDaemon,1incompatibleDaemoncouldnotbereused,usestatusfordetailsFAILURE:Buildfailedwithanexception。Whatwentwrong:Couldnotdeterminethedependenciesoftask:springcore:javapoetRepackJar。Couldnotresolvealldependenciesforconfiguration:springcore:javapoet。Usinginsecureprotocolswithrepositories,withoutexplicitoptin,isunsupported。SwitchMavenrepositorymaven3(http:repo。springsource。orgpluginsrelease)toredirecttoasecureprotocol(likeHTTPS)orallowinsecureprotocols。Seehttps:docs。gradle。org7。6dslorg。gradle。api。artifacts。repositories。UrlArtifactRepository。htmlorg。gradle。api。artifacts。repositories。UrlArtifactRepository:allowInsecureProtocolformoredetails。Try:Runwithstacktraceoptiontogetthestacktrace。Runwithinfoordebugoptiontogetmorelogoutput。Getmorehelpathttps:help。gradle。orgBUILDFAILEDin24s6actionabletasks:1executed,5uptodate 配置gradle的zip 问题四:Gradle下载的依赖包位置 Mac系统默认下载到: Users(用户名)。gradlecachesmodules2files2。1或。gradlecachesmodules2files2。1