idea搭建gradle阅读spring5源码的环境(详细)

注意事项

  1. 最好是一步一步按照顺序来进行。
  2. 先把spring源码拉下来
  3. 根据spring源码的gradle版本再下载相对应的gradle
  4. 可能会与idea版本有关(关系不大)
  5. 善用翻墙

我使用的版本

  1. spring源码(spring-framework-5.1.10.RELEASE)
  2. gradle(gradle-4.10.3)
  3. jdk(1.8.0_73)
  4. idea(使用了两个版本2020.1和2019.3.4)

下载spring源码

github(下载速度可能比较慢):
gitee(国内下载速度较快)
下载完之后打开源码解压路径下的gradle\wrapper文件夹,打开gradle-wrapper.properties文件查看使用的gradle版本
在这里插入图片描述

下载grable

官网(需要翻墙,不然下载很慢)
简书中的云盘(搬运,如有侵权请联系我删除)
下载上面的4.10.3版本
下载完之后解压到本地,然后配置好环境变量,在解压之后的文件夹后新建一个.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
        }
    }
}

接下来配置我们的环境变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

导入之前的准备

环境变量配置好后打开cmd测试版本

gradle -v

查看当前gradle的kotlin与groovy版本与spring源码中的是否相同
当前gradle:
在这里插入图片描述
spring源码下的build.gradle文件:
在这里插入图片描述
如果有版本不对的话需要将spring源码下的build.gradle调整为本地gradle的版本

替换源码docs.gradle文件中的task schemaZip配置
在gradle的构建脚本,只针对Linux系统做了适配,需要把task schemaZip替换成下面代码,因为原有代码的路径符号“/”是针对Linux的,windows使用会有问题,在windows环境需要替换成"",否则会出现如下异常:

* What went wrong:
Failed to capture snapshot of input files for task ':distZip' property 'rootSpec$1$3' during up-to-date check.
> Failed to create MD5 hash for file 'D:\repository\spring-framework-5.0.8.RELEASE\build\distributions\spring-framework-5.0.8.RELEASE-schema.zip'.
 
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
 
* Get more help at https://help.gradle.org
 
BUILD FAILED in 1m 43s
254 actionable tasks: 3 executed, 251 up-to-date

参考如下代码,注释部分是原有的代码:

//task schemaZip(type: Zip) {
//  group = "Distribution"
//  baseName = "spring-framework"
//  classifier = "schema"
//  description = "Builds -${classifier} archive containing all " +
//          "XSDs for deployment at http://springframework.org/schema."
//  duplicatesStrategy 'exclude'
//  moduleProjects.each { subproject ->
//      def Properties schemas = new Properties();
//
//      subproject.sourceSets.main.resources.find {
//          it.path.endsWith("META-INF/spring.schemas")
//      }?.withInputStream { schemas.load(it) }
//
//      for (def key : schemas.keySet()) {
//          def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1')
//          assert shortName != key
//          File xsdFile = subproject.sourceSets.main.resources.find {
//              it.path.endsWith(schemas.get(key))
//          }
//          assert xsdFile != null
//          into (shortName) {
//              from xsdFile.path
//          }
//      }
//  }
//}
task schemaZip(type: Zip) {
    group = "Distribution"
    baseName = "spring-framework"
    classifier = "schema"
    description = "Builds -${classifier} archive containing all " +
            "XSDs for deployment at http://springframework.org/schema."
    duplicatesStrategy 'exclude'
    moduleProjects.each { subproject ->
        def Properties schemas = new Properties();
 
        subproject.sourceSets.main.resources.find {
            it.path.endsWith("META-INF\\spring.schemas")
        }?.withInputStream { schemas.load(it) }
 
        for (def key : schemas.keySet()) {
            def shortName = key.replaceAll(/http.*schema.(.*).spring-.*/, '$1')
            assert shortName != key
            File xsdFile = subproject.sourceSets.main.resources.find {
                it.path.endsWith(schemas.get(key).replaceAll('\\/','\\\\'))
            }
            assert xsdFile != null
            into (shortName) {
                from xsdFile.path
            }
        }
    }
}

修改根目录下的gradle.properties,修改如下

org.gradle.daemon=true
org.gradle.jvmargs=-Xmx512m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.parallel=true
org.gradle.configureondemand=true

**spring源码项目中gradle配置默认是从外网下载资源的 我们可以在build.gradle中配置本项目的下载地址在这里插入图片描述

导入项目

以2020.1为例:打开idea选择file–>new -->select file or Directory to Import 选择源码下的build.gradle
设置一下我们idea中的gradle
在这里插入图片描述
下方的jvm必须与cmd中gradle查看到的jvm版本相同
再修改kotlin的配置
在这里插入图片描述
接下来就可以下载依赖了
在这里插入图片描述
接下来执行compileTestJava
在这里插入图片描述
执行完之后再进行build操作
在这里插入图片描述
等build执行成功之后就搭建完成了

可能会出现的bug

  1. 下载依赖时报错
Plugin [id: 'io.spring.dependency-management', version: '1.0.5.RELEASE', apply: false] was not found in any of the following sources:

这个问题困扰了我两天 最后通过下载19.3.4版本的idea就ok了,具体原因也不清楚,但是在19.3.4版本中下载完依赖之后就能在20.1版本中运行了

  1. build时javadoc报错
Execution failed for task ':mylibrary:mavenAndroidJavadocs'.

这个的话我通过参考外网的解决方法解决了
在项目下的build.gradle中添加

   tasks.withType(Javadoc).all {
    enabled = false
    }

引用资料

javadoc报错解决途径
https://blog.csdn.net/Dcwjh/article/details/104471560

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值