Spring源码搭建

文章目录

  • Gradle安装
  • Spring源码下载
  • 修改Spring源码中Gradle配置
  • 构建Spring源码
  • 导入IDEA
  • 创建Spring源码debug调试模块
    • spring模块
    • 相关错误解决
    • 学习博客


Gradle安装

安装示例

allprojects {
repositories {
maven { url ‘file:///D:/develop/IDE-Repository’}
mavenLocal()
maven { name “Alibaba” ; url “https://maven.aliyun.com/repository/public” }
maven { name “Bstek” ; url “https://nexus.bsdn.org/content/groups/public/” }
mavenCentral()
}

buildscript { 
    repositories { 
	maven { url 'https://maven.aliyun.com/repository/google'}
    maven { url 'https://maven.aliyun.com/repository/jcenter'}
    maven { url 'https://maven.aliyun.com/nexus/content/groups/public'}
    }
}

}

allprojects {
    repositories {
        maven { url 'file:///D:/develop/IDE-Repository'}
        mavenLocal()
        maven { name "Alibaba" ; url "https://maven.aliyun.com/repository/public" }
        maven { name "Bstek" ; url "https://nexus.bsdn.org/content/groups/public/" }
        mavenCentral()
    }

    buildscript { 
        repositories { 
		maven { url 'https://maven.aliyun.com/repository/google'}
        maven { url 'https://maven.aliyun.com/repository/jcenter'}
        maven { url 'https://maven.aliyun.com/nexus/content/groups/public'}
        }
    }
}

repositories中配置获取依赖jar包的顺序:
先是从本地maven仓库中获取
然后mavenLocal()是获取maven本地仓库的路径,和第一条一样,但是不冲突
第三条第四条分别为国内alibaba镜像仓库和国外bstek镜像仓库
最后mavenCentral()是从apache提供的中央仓库中获取依赖jar包

Spring源码下载

官方下载地址

Spring对应DK版本:

  • Spring Framework 6.0.x:JDK 17-21(预期)
  • Spring Framework 5.3.x:JDK 8-19(预期)
  • Spring 框架 5.2.x:JDK 8-15
  • Spring 框架 5.1.x:JDK 8-12
  • Spring 框架 5.0.x:JDK 8-10
  • Spring Framework 4.3.x:JDK 6-8

修改Spring源码中Gradle配置

阿里镜像配置

在下载的Spring源码下修改gradle/wrapper/gradle-wrapper.properties文件如下:

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
## distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
## 配置本地gradle, 配置之后需要按下例配置gradle的中央仓库(阿里云maven中央仓库)
distributionUrl=file:///D:/develop/IDE-Gradle/gradle-7.3.1-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

或者distributionUrl配置为distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-7.3-bin.zip

修改Spring源码根目录下build.gradle文件中的repositories:

repositories {
         // 配置本地maven仓库
         mavenLocal()
         // 配置阿里云maven仓库
         maven { url "https://maven.aliyun.com/nexus/content/groups/public/" }
         maven { url "https://maven.aliyun.com/nexus/content/repositories/jcenter/" }
         // maven中央仓库
         mavenCentral()
         maven { url "https://repo.spring.io/libs-spring-framework-build" }
     }

修改Spring源码根目录下settings.gradle文件中pluginManagement下的repositories:

pluginManagement {
	repositories {
		// 配置阿里云 maven 中央仓库
		maven { url 'https://maven.aliyun.com/repository/public/' }
		gradlePluginPortal()
		maven { url 'https://repo.spring.io/plugins-release/' }
	}
}

如果仓库地址不为HTTPS,则需要在仓库地址后加 ‘allowInsecureProtocol=true’:

maven { 
	url 'http://maven.aliyun.com/repository/public/'
	allowInsecureProtocol=true 
}

构建Spring源码

Spring源码所在的文件目录下使用cmd执行 gradlew :spring-oxm:compileTestJava

如某个jar包没下载成功等,只需要重新执行./gradlew :spring-oxm:compileTestJava再次进行预编译就行了。

构建完成之后修改根目录下setting.gradle文件,注释掉spring-aspects:

....
include "spring-aop"
// 移除aspects
// include "spring-aspects"
include "spring-beans"
include "spring-context"
....

Spring源码目录下有 import-into-eclipse.mdimport-into-idea.md两个文档,分别对应eclipse导入和Idea导入步骤,可参考。

导入IDEA

使用 IDEA 选择源码路径下build.gradle文件导入。

  • 点击File | Settings | Build, Execution, Deployment | Build Tools | Gradle,配置IDEA的Gradle配置:配置Gradle user home为自己Gradle本地仓库目录

  • Ctrl+Alt+Shift+S快捷键打开Project Structure。修改工程的SDK,分别将Project、Modules、SDKs中的JDK设置为本地安装的JDK(版本为1.8及以上)。

  • Ctrl+Alt+Shift+S快捷键打开Project Structure。在Modules中排除spring-aspects:

  • Alt+F12快捷键打开Terminal,使用gradlew.bat命令进行编译

编译成功后会出现BUILD SUCCESSFUL的提示。如果有报错根据报错信息进行处理,多编译几次即可。

使用shift+shift快捷键输入ApplicationContext类,使用Ctrl+Shift+Alt+U如果能够成功打开类图,也证明Spring源码构建成功

创建Spring源码debug调试模块

项目右键新建Gradle模块,名称随意,这里取spring-gabriel

修改新建模块build.gradle文件,导入依赖和配置仓库地址 :

init.d配置 :

repositories {

    // 配置本地 maven 仓库
    mavenLocal()
    // 配置阿里云 maven 仓库
    maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
    maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter' }

    mavenCentral()
}

dependencies {
   
    // 测试需要依赖
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
    //导入 spring-context模块, 包含bean工厂
    implementation(project(':spring-context'))
    //导入spring-instrument 模块, 此模块为 spring-context 模块编译所必须的
    implementation(project('::spring-instrument'))
    //compile和testCompile已经被gradle 7.x 弃用
    //testCompile group: 'junit', name: 'junit', version: '4.12'
    //compile(project(":spring-context"))

}

test {
    useJUnitPlatform()
}

IDEA默认新建模块后默认Gradle配置名称为build.gradle,需要手动修改为spring-gabriel.gradle

搭建博客及AspectJ搭建

spring模块

spring-core
spring-beans
spring-context:以core和beans模块为基础构建,提供上下文的构建
spring-context-support:整合第三方库
spring-expression:提供表达式支持
spring-aop:切面模块
spring-aspects:提供AspetJ的集成
spring-instrument:类加载器的实现
spring-instrument-tomcat:模块包含了支持Tomcat的植入代理
spring-messaging:用于消息转递,类似于基于Spring MVC注释的编程模型
spring-jdbc:模块提供了一个JDBC –抽象层
spring-tx:模块支持用于实现特殊接口和所有POJO(普通Java对象)的类的编程和声明式事务 管理
spring-orm:模块为流行的对象关系映射(object-relational mapping )API提供集成层,包括JPA和Hibernate。使用spring-orm模块,您可以将这些O / R映射框架与Spring提供的所有其他功能结合使用,例如前面提到的简单声明性事务管理功能
spring-oxm:模块提供了一个支持对象/ XML映射实现的抽象层
spring-jms:模块(Java Messaging Service) 包含用于生产和消费消息的功能。
spring-web:模块提供基本的面向Web的集成功能,例如多部分文件上传功能,以及初始化一个使用了Servlet侦听器和面向Web的应用程序上下文的IoC容器。它还包含一个HTTP客户端和Spring的远程支持的Web相关部分。
spring-webmvc:模块(也称为Web-Servlet模块)包含用于Web应用程序的Spring的模型-视图-控制器(MVC)和REST Web Services实现。

相关错误解决

错误集合

学习博客

知乎

cdsn1

csdn2

Bean扫描及注册解析

你可能感兴趣的:(Spring,spring,java,后端)