本示例基于 SpringV5.2.18RELEASE+GradleWapper+jdk1.8.0_101编译
gradle我没有自己单独安装,使用的是GradleWapper中的gradle,当然也可以自己下载
idea破解:大家自行百度
进入GitHub - spring-projects/spring-framework: Spring Framework
Spring的源码是发布在github上面的,由于需要从国外下载,速度可能会慢
可以使用gitee git下载
gitee地址
如图
源码下载可以直接下载zip包,也可以使用git clone
我是直接下载的zip包
安装源码对应的gradle版本(也可不安装),建议使用gradleWraper中的gradle。
Gadle介绍:
Gradle是个构建系统,能够简化你的编译、打包、测试过程。熟悉Java的同学,可以把Gradle类比成Maven。
Gradle Wrapper的作用是简化Gradle本身的安装、部署。不同版本的项目可能需要不同版本的Gradle,手工部署的话比较麻烦,而且可能产生冲突,所以需要Gradle Wrapper帮你搞定这些事情。Gradle Wrapper是Gradle项目的一部分。
gradleWraper在该文件中有体现,相当于远程自动下载gradle到本地(所以你可以下载gradle,也可以不下,因为可以使用gradleWraper远程的统一版本):spring-framework-5.2.18.RELEASE\gradle\wrapper\gradle-wrapper.properties
所以如果你需要下载也最好下载该链接对应的gradle版本
这个文件就相当于我们Maven的pom.xml 管理项目的依赖等信息...
设置镜像
repositories {
maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'}
maven{ url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
mavenCentral()
maven { url "https://repo.spring.io/libs-spring-framework-build" }
}
按照官网的方式编译:
使用gradlew(gradle-wrapper命令) 先编译oxm:compileTest Java: Precompile spring-oxm with ./gradlew :spring-oxm:compileTestJava
打开源码所在文件夹,在windows cmd命令中输入
gradlew :spring-oxm:compileTestJava
第一次运行上面命令,如果没有自己安装gradle,它会自动去下载gradleWraper中对应版本的gradle
然后等待几分钟
git的报错是因为我是直接下载的zip包,使用git clone应该不会有这个报错
导入项目到idea中:Import into IntelliJ (File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle)
选择spring源码的文件夹,然后项目类型选择gradle
gradle设置:
导入后等待编译,莫急,需要一点点时间,编译完成:
选择gradle
添加依赖
在新建模块的build.gradle下添加依赖
dependencies {
compile(project(":spring-context"))
testCompile group: 'junit', name: 'junit', version: '4.12'
}
compile(project(":spring-context")) 代表本项目的
随意添加任意bean
package com.fztx.beans;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl {
public void sayHi() {
System.out.println("Hello");
}
}
添加配置类
package com.fztx.beans;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan("com.fztx")
public class MyConfig {
}
测试类
package com.fztx.beans;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
public class MyTest {
public static void main(String[] args) {
ApplicationContext context=new AnnotationConfigApplicationContext(MyConfig.class);
UserServiceImpl bean = context.getBean(UserServiceImpl.class);
bean.sayHi();
}
}
正确输出:
但是现在是用gradle bulid和运行的,每次都很慢,所以可以修改一下编译方式,使用idea编译运行
修改完之后再运行会有报错
将jar包添加到sping.aop:main
同样其他类似缺少jar的问题也是一样,看报错信息是再编译那个moudle时缺少哪个jar
其他常见问题:
1.Error:(354, 51) java: 找不到符号
符号: 变量 CoroutinesUtils
位置: 类 org.springframework.core.ReactiveAdapterRegistry.CoroutinesRegistrar
2.程序包jdk.jfr不存在
3.缺少 cglib 和 objenesis 包
Kotlin: warnings found and -Weeror specified
可参考:Spring源码下载编译阅读_zjssoul的博客-CSDN博客
最后,成功运行,大功告成!