欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-02 10:56:23
...

注意事项

  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版本
idea搭建gradle阅读spring5源码的环境(详细)

下载grable

官网(需要*,不然下载很慢)
简书中的云盘(搬运,如有侵权请联系我删除)
下载上面的4.10.3版本
下载完之后解压到本地,然后配置好环境变量,在解压之后的文件夹后新建一个.gradle文件夹用来充当本地仓库
idea搭建gradle阅读spring5源码的环境(详细)
然后在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
        }
    }
}

接下来配置我们的环境变量
idea搭建gradle阅读spring5源码的环境(详细)
idea搭建gradle阅读spring5源码的环境(详细)
idea搭建gradle阅读spring5源码的环境(详细)

导入之前的准备

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

gradle -v

查看当前gradle的kotlin与groovy版本与spring源码中的是否相同
当前gradle:
idea搭建gradle阅读spring5源码的环境(详细)
spring源码下的build.gradle文件:
idea搭建gradle阅读spring5源码的环境(详细)
如果有版本不对的话需要将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中配置本项目的下载地址idea搭建gradle阅读spring5源码的环境(详细)

导入项目

以2020.1为例:打开idea选择file–>new -->select file or Directory to Import 选择源码下的build.gradle
设置一下我们idea中的gradle
idea搭建gradle阅读spring5源码的环境(详细)
下方的jvm必须与cmd中gradle查看到的jvm版本相同
再修改kotlin的配置
idea搭建gradle阅读spring5源码的环境(详细)
接下来就可以下载依赖了
idea搭建gradle阅读spring5源码的环境(详细)
接下来执行compileTestJava
idea搭建gradle阅读spring5源码的环境(详细)
执行完之后再进行build操作
idea搭建gradle阅读spring5源码的环境(详细)
等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