IDEA+Gradle编译spring5.1.x源码

spring源码下载:

github:https://github.com/spring-projects/spring-framework/tree/5.1.x
gitee:https://gitee.com/mirrors/Spring-Framework/tree/5.1.x/

说明

尝试编译spring源码,在网上搜索了许多方法进行尝试。我这里最大的问题的,在把spring源码导入IDEA时报错。有编译setting.gradle报错,java.lang.NoClassDefFoundError DefaultConvention等等。试了各种方式终于成功了。在此记录一下在此过程中的疑惑。

版本说明

网上说版本很敏感,动不动就可能出问题。这里我也记录一下
jdk:1.8.0_91
gradle:gradle-6.7-bin
idea:2020.1.3

JDK

原本就这个版本,不知道其他版本是否会有问题

Gradle版本

查看sping源码目录\gradle\wrapper的gradle-wrapper.properties文件根据distributionUrl确定gradle版本
这里不确定把gradle版本改成自己已安装的gradle版本是否可以。

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

IDEA版本

参考链接:https://blog.csdn.net/hundred_li_journey/article/details/108278795
原先是2018.2但是失败了,但是换成了2020.1.3确实没问题了


具体步骤简单记录

详细步骤查看https://blog.csdn.net/u013469325/article/details/106575704

安装Gradle

网上都有,这里简单说明一下。

官网下载链接https://gradle.org/releases/

环境变量配置
GRADLE_HOME:D:\gradle-6.7==>(对应自己的安装目录)
Path:%GRADLE_HOME%\bin
GRADLE_USER_HOME:F:\mavenRepositroy==>(Gradle本地仓库目录)

安装测试
cmd输入 gradle -v

配置gradle下载远程仓库:
在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
        }
    }
}

修改Spring配置

查看https://blog.csdn.net/u013469325/article/details/106575704

1.修改settings.gradle文件,下载依赖的网络速度之不可描述原因,懂得人都懂,我们加上阿里云的maven仓库。

maven { url "https://maven.aliyun.com/repository/public" }

在这里插入图片描述
2. 修改gradle.properties文件

version=5.3.2-SNAPSHOT // 这一行应该不用改,贴出来显示一下我这里的版本
org.gradle.jvmargs=-Xmx2048M
org.gradle.caching=true
org.gradle.parallel=true
kotlin.stdlib.default.dependency=false
org.gradle.configureondemand=true
org.gradle.daemon=true

这里是参考链接的

version=5.3.0-SNAPSHOT
## 设置此参数主要是编译下载包会占用大量的内存,可能会内存溢出
org.gradle.jvmargs=-Xmx2048M
## 开启 Gradle 缓存
org.gradle.caching=true
## 开启并行编译
org.gradle.parallel=true
## 启用新的孵化模式
org.gradle.configureondemand=true
## 开启守护进程 通过开启守护进程,下一次构建的时候,将会连接这个守护进程进行构建,而不是重新fork一个gradle构建进程
org.gradle.daemon=true

3.修改build.gradle文件,加上使用阿里云仓库,提高下载速度。(这一步我是没有的)

maven { url 'https://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'https://maven.aliyun.com/nexus/content/repositories/jcenter'}

在这里插入图片描述

准备构建

查看https://blog.csdn.net/u013469325/article/details/106575704

  1. 预编译spring-oxm,根据import-into-idea.md要求,我们需要先预编译spring-oxm和spring-core
    cmd进入spring目录中使用命令gradlew :spring-oxm:compileTestJava

  2. 同上,预编译spring-core,使用命令./gradlew :spring-core:compileTestJava

IDEA导入Spring源码

查看https://blog.csdn.net/u013469325/article/details/106575704
在导入idea时就会开始构建编译,等构建编译完成,spring源码构建也就完成

测试

为后期补充进去的和上文的spring有些区别(jdk换了11)
新建模块
在这里插入图片描述

在这里插入图片描述

既然要验证,那我们肯定需要依赖spring的模块,我们在我们刚刚新建的模块下build.gradle文件中修改使用阿里云仓库,同时依赖spring-context模块。然后重新编译

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

在这里插入图片描述

项目结构
在这里插入图片描述

package com.wwj.config;

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

@Configuration
@ComponentScan("com.wwj")
public class WwjConfig {
}
package com.wwj.entity;

import org.springframework.stereotype.Component;

@Component
public class User {

	public void sayHello() {
		System.out.println("Hello World");
	}

}
package com.wwj;

import com.wwj.config.WwjConfig;
import com.wwj.entity.User;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

public class WwjTest {

	public static void main(String[] args) {
		AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(WwjConfig.class);

		User user = ac.getBean(User.class);

		user.sayHello();
	}

}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值