zoukankan      html  css  js  c++  java
  • Spring源码分析——调试环境搭建(可能是最省事的构建方法)

    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 选择刚才源码的下载路径进行导入

       

       

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

       

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

         

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

         

    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 修改如下:

         

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

        

    这些观点只代表自己观点,本人写的东西只是自己在工作或者生活中遇到的问题和大家分享一下,方便自己和大家的查阅,目前博客主要更新两大类。在用微服务中遇到的问题,技术的整理和数据库优化方面。以后还会增加其他板块。如有错误的地方请联系博主会及时更正。
  • 相关阅读:
    MybatisPlus分页插件、常用查询
    object与map与json之间的相互转换
    MybatisPlus逻辑删除、执行性能
    MybatisPlus实现自动填充(表字段创建、修改时间自动填写)、version乐观锁
    Swagger2的使用
    uniapp小程序增加自定义字体
    新发安卓应用APP 怎么快速上应用市场 简单谈谈
    Android平台应用启动时读写手机存储、访问设备信息(如IMEI)等权限策略及提示信息
    ios真机调试,iTunes检测得到,hbuilder未检测到手机和模拟器的解决办法
    nohup命令
  • 原文地址:https://www.cnblogs.com/Caucasian/p/9917891.html
Copyright © 2011-2022 走看看