天天看点

SpringFramework(一) 源码编译

本篇文章引用了多篇文章,但不记得是哪些文章了,当时遇到问题百度记录的。

如果同学发现原创地址,可评论列出,我会在文章中标明。

肯定是多个文章的集合,所以发布为原创

编译准备

  1. JDK环境(1.8+)
  2. Gradle环境(匹配spring环境)

注意:gradle环境不要使用spring的下载链接,去官网下载对应版本。具体版本最好与源码中gradle/wrapper/gradle-wrapper.properties中的下载链接版本一致。

SpringFramework(一) 源码编译

修改配置文件

  1. 修改gradle\wrapper\gradle-wrapper.properties文件内容,让它使用我们自己配置的gradle,要不然它还是会去远程下载。
    distributionBase=GRADLE_USER_HOME
    distributionPath=wrapper/dists
    #distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-bin.zip
    distributionUrl=file\:~/.gradle/gradle-5.6.4.zip
    zipStoreBase=GRADLE_USER_HOME
    zipStorePath=wrapper/dists
               
  2. build.gradle注释掉一行代码
    SpringFramework(一) 源码编译
  3. build.gradle文件中找到repositories部分,添加阿里云镜像,编译会更快
    SpringFramework(一) 源码编译
    maven{  url 'https://maven.aliyun.com/nexus/content/groups/public/'}
    			maven{ url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}
    			maven { url "http://repo.springsource.org/plugins-release" }
               
  4. settings.gradle文件并打开,修改repositories部分
    SpringFramework(一) 源码编译
    maven{ url 'https://maven.aliyun.com/nexus/content/groups/public/'}
               

进行预编译

# linux/Mac:在配置好gradle环境之后执行
gradle :spring-oxm:compileTestJava
# Windows
gradlew :spring-oxm:compileTestJava
           

注:正常应该需要几分钟时间

导入IDEA

注意:导入进去后就开始编译了,就需要暂停编译。我这里IDEA版本为2020.3(Mac),不同版本/系统需要找到对应的地方。

SpringFramework(一) 源码编译

测试DEMO

新建gradle模块,修改gradle配置文件,引入依赖

compile(project(":spring-context"))

@Service
public class UserService {
	public void sayHello(){
		System.out.println("你好呀spring!");
	}
}
@Configuration
@ComponentScan("mine.test")
public class App {
	public static void main(String[] args) {
		ApplicationContext context=new AnnotationConfigApplicationContext(App.class);
		UserService bean = context.getBean(UserService.class);
		bean.sayHello();
	}
}
           

常见问题

  1. 每次编译,都会有很多Task,这里settings-Tools-Gradle
    SpringFramework(一) 源码编译
  2. 第1步后经常会报错,CoroutinesUtils找不到该类

    点击File -> Project Structure -> Libraries -> + -> Java,然后选择spring-framework/spring-core/kotlin-coroutines/build/libs/kotlin-coroutines-5.2.12.RELEASE.jar,在弹出的对话框中选择spring-core.main,在重新build项目即可

  3. 第2步后可能会出现另一个问题,找不到InstrumentationSavingAgent

    找到报错模块的gradle文件,这里是: spring-context.gradle,把optional修改为compile

SpringFramework(一) 源码编译

继续阅读