欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring源码分析——调试环境搭建(可能是最省事的构建方法)

程序员文章站 2023-11-23 22:10:40
1. 依赖工具 idea git jdk 1.8 + Gradle 2. 获取源码 从github https://github.com/spring-projects/spring-framework 上 Fork 出属于自己的仓库。如果懒得这么做也可以直接Clone or download下载源 ......

1. 依赖工具

  • idea
  • git
  • jdk 1.8 +
  • gradle

2. 获取源码

  从github https://github.com/spring-projects/spring-framework 上 fork 出属于自己的仓库。如果懒得这么做也可以直接clone or download下载源码包。

3.使用idea编译源码

  首先打开idea,点击file —> open 选择刚才源码的下载路径进行导入

   Spring源码分析——调试环境搭建(可能是最省事的构建方法)

   Spring源码分析——调试环境搭建(可能是最省事的构建方法)

   点击“ok”按钮会弹出以下配置框,主要是配置jdk位置,和global位置(如果没有下载idea会自动帮你装配global)

   Spring源码分析——调试环境搭建(可能是最省事的构建方法)

   点击确认后,就会打开spring 源码,idea下面会显示正在导入包中(导包过程很慢请耐心等待)

     Spring源码分析——调试环境搭建(可能是最省事的构建方法)

     所有关联包导入完毕后需要build下项目,导入项目完成(如图操作)

     Spring源码分析——调试环境搭建(可能是最省事的构建方法)

4.运行调试

  经过上面的步骤之后基本上就可以直接运行 spring 的 testcase 了  可以先选择调试 “xmlbeandefinitionreadertests” 类(作用: 解析 xml 配置文件成对应的 beandefinition 们的流程)。有可能会遇到如下的错

error:kotlin: [internal error] java.lang.abstractmethoderror: org.jetbrains.kotlin.scripting.compiler.plugin.scriptingcompilerconfigurationcomponentregistrar.registerprojectcomponents(lcom/intellij/mock/mockproject;lorg/jetbrains/kotlin/config/compilerconfiguration;)v
	at org.jetbrains.kotlin.cli.jvm.compiler.kotlincoreenvironment.<init>(kotlincoreenvironment.kt:173)
	at org.jetbrains.kotlin.cli.jvm.compiler.kotlincoreenvironment.<init>(kotlincoreenvironment.kt:114)
	at org.jetbrains.kotlin.cli.jvm.compiler.kotlincoreenvironment$companion.createforproduction(kotlincoreenvironment.kt:401)
	at org.jetbrains.kotlin.cli.jvm.k2jvmcompiler.createcoreenvironment(k2jvmcompiler.kt:282)
	at org.jetbrains.kotlin.cli.jvm.k2jvmcompiler.createenvironmentwithscriptingsupport(k2jvmcompiler.kt:272)
	at org.jetbrains.kotlin.cli.jvm.k2jvmcompiler.doexecute(k2jvmcompiler.kt:151)
	at org.jetbrains.kotlin.cli.jvm.k2jvmcompiler.doexecute(k2jvmcompiler.kt:61)
	at org.jetbrains.kotlin.cli.common.clicompiler.execimpl(clicompiler.java:107)
	at org.jetbrains.kotlin.cli.common.clicompiler.execimpl(clicompiler.java:51)
	at org.jetbrains.kotlin.cli.common.clitool.exec(clitool.kt:92)
	at org.jetbrains.kotlin.daemon.compileserviceimpl$compile$$inlined$ifalive$lambda$1.invoke(compileserviceimpl.kt:380)
	at org.jetbrains.kotlin.daemon.compileserviceimpl$compile$$inlined$ifalive$lambda$1.invoke(compileserviceimpl.kt:96)
	at org.jetbrains.kotlin.daemon.compileserviceimpl$docompile$$inlined$ifalive$lambda$2.invoke(compileserviceimpl.kt:892)
	at org.jetbrains.kotlin.daemon.compileserviceimpl$docompile$$inlined$ifalive$lambda$2.invoke(compileserviceimpl.kt:96)
	at org.jetbrains.kotlin.daemon.common.dummyprofiler.withmeasure(perfutils.kt:137)
	at org.jetbrains.kotlin.daemon.compileserviceimpl.checkedcompile(compileserviceimpl.kt:919)
	at org.jetbrains.kotlin.daemon.compileserviceimpl.docompile(compileserviceimpl.kt:891)
	at org.jetbrains.kotlin.daemon.compileserviceimpl.compile(compileserviceimpl.kt:378)
	at sun.reflect.nativemethodaccessorimpl.invoke0(native method)
	at sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62)
	at sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)
	at java.lang.reflect.method.invoke(method.java:498)
	at sun.rmi.server.unicastserverref.dispatch(unicastserverref.java:346)
	at sun.rmi.transport.transport$1.run(transport.java:200)
	at sun.rmi.transport.transport$1.run(transport.java:197)
	at java.security.accesscontroller.doprivileged(native method)
	at sun.rmi.transport.transport.servicecall(transport.java:196)
	at sun.rmi.transport.tcp.tcptransport.handlemessages(tcptransport.java:568)
	at sun.rmi.transport.tcp.tcptransport$connectionhandler.run0(tcptransport.java:826)
	at sun.rmi.transport.tcp.tcptransport$connectionhandler.lambda$run$0(tcptransport.java:683)
	at java.security.accesscontroller.doprivileged(native method)
	at sun.rmi.transport.tcp.tcptransport$connectionhandler.run(tcptransport.java:682)
	at java.util.concurrent.threadpoolexecutor.runworker(threadpoolexecutor.java:1142)
	at java.util.concurrent.threadpoolexecutor$worker.run(threadpoolexecutor.java:617)
	at java.lang.thread.run(thread.java:745)

   这个主要是kotlin插件的版本问题,解决方案是更新新版本的kotlin插件。贴个链接:intellij idea手动更新kotlin.

5.可能遇到的错

   遇到 instrumentationsavingagent 不存在的错误  需要将 spring-context.gradle 修改如下:

     Spring源码分析——调试环境搭建(可能是最省事的构建方法)

   遇到 objenesis找不到,则需要操作上面的build项目即可(最新版本,bulid后此包就会下载下来。如果是老版本有可能需要手动添加)

    Spring源码分析——调试环境搭建(可能是最省事的构建方法)