Spring5.3+gradle6.4+IDEA2020.1+Java1.8 update6编译spring源码

  这两天一直在解决编译spring源码的问题,期间失败了无数次。当然失败的原因也各不相同,下面我主要列举我在编译期间遇到的问题进行记录。如果大伙儿遇到相同的问题,希望可以给到解决的灵感。好了话不多说,我先来说说编译spring的前期准备。

  准备:1、在github上下载源码 可以git clone 或者 down zip

     2、下载gradle

        3、IDEA 这个不用多说  

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

现在手中我已经有了spring的源码,打开里面是这些文件

 1、和大多数博客写的一样,首先如果你导入IDEA,那么点开import-into-idea.md,到project的根目录下  cmd运行 gradlew :spring-oxm:compileTestJava

    Within your locally cloned spring-framework working directory:

  1. Precompile spring-oxm with ./gradlew :spring-oxm:compileTestJava

  2. Import into IntelliJ (File -> New -> Project from Existing Sources -> Navigate to directory -> Select build.gradle)

  3. When prompted exclude the spring-aspects module (or after the import via File-> Project Structure -> Modules)

  4. Code away

 注意:这期间一般会失败多次 ,然后这个命令还会下载一个新的gradle(虽然我不太喜欢这样,毕竟我自己已经下了一个). 由于时间太长了,所以我们还需要配置gradle国内镜像源。后来为了使用这个新下载的gradle,所以我在C:\Users\xxx\.gradle\wrapper\dists\gradle-6.4-bin\aj6cyggqps6mdbpl6cfppfwqk\gradle-6.4 这个目录下,新建init.d文件夹,init.d文件夹下新建init.gradle文件,并且写入一下内容:

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

第二个要注意的是,虽然这里全局配置了阿里的镜像源,但是并不是所有的版本阿里镜像源都有,所以在后面jar包因为版本问题无法下载时,你最后把这个文件再删除了。就不走全局的配置了。

第三个要注意的是,如果明明联网了,但是还是不能下载,那么就连手机热点把  这个方法有时候有点用。

2、当上一步完成后,其实就可以导入IDEA了。

 再导入源码之前,我建议你先到这个界面,在设置里面把gradle maven 之类配置好。

3、点击open后,IDEA就会帮你自动导入。在此期间它会帮你继续下载需要的jar包,还记的我上面说的如果没办法下载了 记得连连手机热点,并且删除init.gradle试试。

这里需要注意的是,你最好再更改下settings.gradle里面的

pluginManagement {
    repositories {
        maven {url "http://maven.aliyun.com/nexus/content/groups/public/" }
        mavenCentral()
        gradlePluginPortal()
        maven { url 'https://repo.spring.io/plugins-release' }
        maven { url "https://maven.aliyun.com/repository/spring-plugin" }

    }
}

这里可以帮你加速下载jar 。以及build.gradle中的

repositories {
            maven {url "http://maven.aliyun.com/nexus/content/groups/public/" }
            maven {url "http://maven.aliyun.com/nexus/content/repositories/jcenter"}
            mavenCentral()
            maven { url "https://repo.spring.io/libs-spring-framework-build" }
        }

4、如果以上步骤,均没有问题那么你会得到一个新的界面:

 gradle是可以展开的。

接下来你就需要测试了,这里挂一个链接:https://www.bilibili.com/video/BV1XJ41117tT?from=search&seid=11806535173146251076 这个视频说了如何测试。

但是我要说的是,按照视频里面会出现一个错误:

spring 编译 出的错误 Error:(347, 51) java: 找不到符号 符号: 变量 CoroutinesUtils 位置:

当然,很多博主都对这个问题做出了解决:https://blog.csdn.net/gooaaee/article/details/104437902

但是我要说的是,按照上面说的后,其实不用不用再编译整个spring的项目了,直接run即可,那么就出现了:

猜你喜欢

转载自www.cnblogs.com/foot-or-car/p/12976188.html
今日推荐