Spring源码阅读——idea构建spring5.x环境

Spring源码阅读——idea构建spring5.x环境

Scroll Down

idea构建spring5.x环境

构建spring的环境是阅读源码的第一步,现在就构建环境就我踩的坑进行下总结

1.spring版本的选择

首先是要下载spring的relase的版本,其中要注意spring版本对应的gradle版本,我选择的spring-framework-5.1.x。
其中对应的gradle版本在:gradle-wrapper.properties
image.png

2.idea的选择

先开始选择最新的idea版本(2019.3),发现导入识别不了,重新选择了比较低的idea版本(2018.2)

3.gradle版本的选择

选择与spring中的版本差不多的就行,我配置的为
image.png

4.配置阿里镜像

1.先配置gradle环境

image.png
path:
image.png
image.png

2.配置全局阿里的镜像库

在gradle的init.d目录下,新建init.gradle

allprojects{
    repositories {
        def REPOSITORY_URL = 'http://maven.aliyun.com/nexus/content/groups/public/'
        all { ArtifactRepository repo ->
            def url = repo.url.toString()
            if ((repo instanceof MavenArtifactRepository) && (url.startsWith('https://repo1.maven.org/maven2') || url.startsWith('https://jcenter.bintray.com'))) {
                project.logger.lifecycle 'Repository ${repo.url} replaced by $REPOSITORY_URL .'
                remove repo
            }
        }
        maven {
            url REPOSITORY_URL
        }
    }
}

3.项目配置(bulid.gradle)

第三行

repositories {
    maven { url "https://maven.aliyun.com/repository/spring-plugin" }
    maven { url "https://maven.aliyun.com/nexus/content/repositories/spring-plugin" }
    maven { url "https://repo.spring.io/plugins-release" }

151行:

repositories {
    maven { url "https://maven.aliyun.com/repository/central" }
    maven { url "https://repo.spring.io/libs-release" }
    mavenLocal()
	}

3.导入前先进行gradlew.bat

可能时间比较慢
image.png

4.按照gradle项目导入idea

idea一般会自动识别对应的gradle模块,时间比较久
image.png
image.png

5.编辑测试

新建一个gradle的测试模块
image.png
该模块的bulid.gradle(类似maven的pom)

plugins {
    id 'java'
}

group 'org.springframework'
version '5.1.12.BUILD-SNAPSHOT'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile project(":spring-context")
    compile project(":spring-instrument")
}

package cn.xxx.anno;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("cn")
public class SpringConfig {
}

package cn.xxx.dao;

import org.springframework.stereotype.Repository;

@Repository("dao")
public class UserDao {
	public void pringInfo(){
		System.out.println("User dao");
	}
}

test:

package cn.xxx.dao;

import org.springframework.stereotype.Repository;

@Repository("dao")
public class UserDao {
	public void pringInfo(){
		System.out.println("User dao");
	}
}

运行
image.png

5.可能出现的问题

exception during working with external system: java.lang.AssertionError

这个问题应该是下载的spring的gardle版本不符合,我按照网上大多数的方式进行替换但是没有用,会出现一堆莫名其妙的问题,我换了一个2018版本的idea就没有出现这个问题
也有可能出现spring-core模块的jar包下载不下来,cglib和objenesis

cglib("cglib:cglib:${cglibVersion}@jar")
objenesis("org.objenesis:objenesis:${objenesisVersion}@jar")

image.png
可以使用idea的
image.png
他会出现那两个jar包对应的名称直接运行重新下载即可image.png
可以自己下来,打jar包进去就行