这篇文章主要介绍了使用IDEA2019.3.3版本采用Gradle编译Spring5源码(Spring-framework5.0.x)的全过程,亲测有效,需要的朋友可以参考一下。
1、Java环境变量
可以选择自己的版本,我采用的是8u212。官网最新版本是[8u241]。(https://www.oracle.com/java/technologies/javase-jdk8-downloads.html)
2、Gradle环境
-
根据源码确定gradle的版本
打开下载本地目录\spring-framework\gradle\wrapper\gradle-wrapper.properties文件找到distributionUrl,可以看到下载的gradle版本为4.4.1
distributionUrl=https://services.gradle.org/distributions/gradle-4.4.1-bin.zip -
gradle解压
解压gradle-4.4.1目录结构如下:
在目录下新建.gradle文件夹,配置gradle环境变量需要。 -
gradle环境配置
在电脑属性配置新增环境变量GRADLE_HOME
GRADLE_HOME
D:\gradle-4.4.1 ##修改自己的gradle解压目录
在电脑属性配置新增环境变量GRADLE_USER_HOME
GRADLE_USER_HOME
D:\gradle-4.4.1\.gradle ##自己新建的文件夹.gradle
Path中添加如下信息
%GRADLE_HOME%\bin
%GRADLE_USER_HOME%\bin
- 验证gradle环境
通过win+R->cmd->输入命令gradle -v
显示信息如下:
6. 配置gradle远程仓库
在解压目录int.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、源码配置
- 在源码根目录下修改
build.gradle
文件内容如下:
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/'} ## 新增阿里云仓库
maven { url "http://repo.springsource.org/plugins-release" } ## 新增springsource仓库
maven { url "https://repo.spring.io/plugins-release" }
}
groovyVersion = "2.4.12" ## 修改自己安装的gradle的groovy版本为2.4.12("2.4.17"——》"2.4.12")
- 在源码根目录下修改
gradle.properties
文件内容如下:
version=5.0.17.BUILD-SNAPSHOT
org.gradle.daemon=true ## 新增
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m - XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 ## 新增
org.gradle.parallel=true ## 新增
org.gradle.configureondemand=true ## 新增
4、IDEA配置
idea配置gradle如下图所示(需安装gradle插件
)
idea配置kotlin如下图所示
5、依赖下载
-
点击build进行源码依赖下载,如下图所示:
-
build完成大约需要几个小时,如下图所示:
6、源码测试
- 新建测试模块test,目录如下:
- 在test模块的build.gradle如下依赖:
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile(project(":spring-context")) ## 新增
compile(project(":spring-beans")) ## 新增
compile(project(":spring-core")) ## 新增
}
- MyTestBean.java
package com.test.bean;
public class MyTestBean {
private String testStr = "testStr";
public String getTestStr() {
return testStr;
}
public void setTestStr(String testStr) {
this.testStr = testStr;
}
}
- 在resource目录下新建test.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="myTestBean" class="com.test.bean.MyTestBean"></bean>
</beans>
- Test.java
package com.test;
import com.test.bean.MyTestBean;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.support.BeanDefinitionReader;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class Test {
public static void main(String[] args) {
Resource resource = new ClassPathResource("test.xml");
BeanFactory factory = new DefaultListableBeanFactory();
BeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader((BeanDefinitionRegistry) factory);
beanDefinitionReader.loadBeanDefinitions(resource);
MyTestBean myTestBean = (MyTestBean) factory.getBean("myTestBean");
System.out.println(myTestBean.getTestStr());
}
}
- 运行Test.java,出现如下图结果,证明spring5.0.x项目完美部署成功~:
参考文献
Spring源码深度解析
如果您觉得有帮助,欢迎点赞哦 ~ ~ 多谢~ ~