# spring-framework-5.1.x **Repository Path**: lzs_space_dev/spring ## Basic Information - **Project Name**: spring-framework-5.1.x - **Description**: spring 学习 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-12-17 - **Last Updated**: 2024-11-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 基础环境 > JDK版本要在`1.8`及以上版本(不推荐使用`JDK1.8.0_131`网上说spring5.x版本**不兼容**此版本的JDK,其实此版本JDK本身就有问题;) ### 下载Spring 源码 源码地址:https://github.com/spring-projects/spring-framework ```shell git clone https://hub.fastgit.org/spring-projects/spring-framework.git ## 克隆指定版本 ## --depth 表示克隆深度, 1 表示只克隆最新的版本. git clone -b <版本> [--depth=1] https://hub.fastgit.org/spring-projects/spring-framework.git ``` ### 注意事项: 1. 修改`spring-framework-5.1.x\gradle\wrapper` 目录下`gradle-wrapper.properties` 2. 一定要下载一个版本的gradle (减少出差几率) ```bash distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists ## 下载配置文件中的gradle版本 并修改配置文件 # distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-all.zip distributionUrl=file:///D:/dev/gradle-4.10.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists ``` ### 下载并解压Gradle 下载上述版本的gradle; Gradle下载地址:[https://gradle.org/releases/](https://gradle.org/releases/) ### 配置Gradle环境变量 ```bash GRADLE_HOME= D:/dev/gradle-4.10.3 GRADLE_USER_HOME= D:/dev/gradle-4.10.3/jars/ ##PATH 中添加 %GRADLE_HOME%\bin ``` ### 添加阿里云镜像 `spring-framework-5.1.x`目录下`build.gradle`文件 **请使用`https`协议不要使用`http`协议** ```json buildscript { repositories { maven { url 'https://maven.aliyun.com/nexus/content/repositories/google'} maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'} maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'} maven { url 'https://repo.springsource.org/plugins-release'} } dependencies { classpath("io.spring.gradle:propdeps-plugin:0.0.9.RELEASE") classpath("org.asciidoctor:asciidoctorj-pdf:1.5.0-alpha.16") } } ``` ```json plugins { id "io.spring.dependency-management" version "1.0.7.RELEASE" apply false id "org.jetbrains.kotlin.jvm" version "1.2.71" apply false id "org.jetbrains.dokka" version "0.9.18" id "org.asciidoctor.convert" version "1.5.8" } // 注意下面全局镜像源必须放在plugins的后面(plugins本来就有不需要配置) allprojects { repositories { maven { url 'https://maven.aliyun.com/nexus/content/repositories/google'} maven { url 'https://maven.aliyun.com/nexus/content/groups/public/'} maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'} maven { url 'https://repo.springsource.org/plugins-release'} } } ``` ### 编译源码 编译方式有两种: `spring-framework-5.1.x`目录 1. **gradlew.bat 直接运行** 2. dos 运行**`gradlew build`** 直到看到 BUILD SUCCEESSFUL 就成功了,dos窗口可能会关闭,注意看即可 ## 导入IDEA `File → Project from Existing Sources` ### 修改项目 ![](image-idea.png) ![](image-idea-jdk.png) 静观其变,等到它构建完之后看到`BUILD SUCCESSFUL` 就成功了 ### 编译 `gradle → spring-core → Task → other → compileTestJava` (双击之后等待编译完成) ### 跑测试代码 `spring → spring-beans → src → test → org.springframework.beans` → 右键 Run 大部分特使代码跑通即可 ### **建立模块测试代码** 当前项目 `new → module → gradle → moduleName → create → Witing` 等待建立gradle项目 当前项目:`build.gradle` 添加spring依赖 ```json dependencies { compile(project(":spring-context")) implementation project(path: ':spring-beans') implementation project(path: ':spring-context') } ``` JavaCode: ```java public class User { private String name; private Integer age; public void setName(String name) { this.name = name; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } } public interface IUserService { User getUser(int uid); } public class UserServiceImpl implements IUserService { @Override public User getUser(int uid) { User u = new User(); u.setAge(20); u.setName("zhang san"); return u; } } ``` Spring.xml ```xml ``` 测试代码: ```java @Test public void testXml() { ApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-text.xml"); UserServiceImpl userService = (UserServiceImpl) context.getBean("userService"); User user = userService.getUser(1); System.out.println(user); } ``` ## 常见错误 ### Kotlin 版本不对 概述`Kotlin: Language version 1.1 is no longer supported; please, use version 1.3` 修改项目:`build.gradle` 文件 ```json compileKotlin { kotlinOptions { jvmTarget = "1.8" freeCompilerArgs = ["-Xjsr305=strict"] apiVersion = "1.4" languageVersion = "1.4" } } compileTestKotlin { kotlinOptions { jvmTarget = "1.8" freeCompilerArgs = ["-Xjsr305=strict"] apiVersion = "1.4" languageVersion = "1.4" } } ``` ### 跑测试代码是 出现循环依赖 概述: ```bash Circular dependency between the following tasks: :spring-beans:compileGroovy --- :spring-beans:compileJava --- :spring-beans:compileKotlin --- :spring-beans:compileGroovy (*) ``` 修改`spring-beans.gradle`文件 ```json // 方式一、注释这两行代码 //compileGroovy.dependsOn = compileGroovy.taskDependencies.values - 'compileJava' //compileKotlin.dependsOn(compileGroovy) compileKotlin.classpath += files(compileGroovy.destinationDir) // 方式二 //将 spring-beans.gradle 最后三行: //compileGroovy.dependsOn = compileGroovy.taskDependencies.values - "compileJava" //compileKotlin.dependsOn(compileGroovy) //compileKotlin.classpath += files(compileGroovy.destinationDir) // 替换成: def deps = compileGroovy.taskDependencies.immutableValues + compileGroovy.taskDependencies.mutableValues compileGroovy.dependsOn = deps - "compileJava" compileKotlin.dependsOn(compileGroovy) compileKotlin.classpath += files(compileGroovy.destinationDir) // 就可以将spring-beans编译成功了。 ```