记录下自己编译Spring5源码的过程(一)之处理依赖问题

缘起

这段时间一直接触Spring,我这人就喜欢没事看看源码,捣鼓捣鼓写东西,于是就想着研究下Spring的源码,于是到Github下载了Spring5的源码,尝试着编译,不过总是碰到些问题。比如:Gradle同步是老师报PKIX异常(ssl证书问题),或是某些东西无法下载,花了好久、躺了许多坑,最终在我给老爸打电话时点击同步等了许久它突然就好了,神奇。

踩坑

一开始我下了源码直接就Gradle同步,然后报错无法下载某些文件,再加上证书问题。于是我就研究怎么让gradle能够忽略证书校验,写了个gradle的配置,见下文。

解决方案

如下解决方案我也有点搞不懂为啥有时可以有时不可以。

Git代码库版本

有些版本会报依赖无法下载问题,这个可以用。

f536819c5d2b90c04741446fe4fa9c158252f1fd

使用git checkout到这个版本。

init.gradle

// 不确定是否生效了,因为加上这个还是会报
import javax.net.ssl.*
import java.security.KeyManagementException
import java.security.NoSuchAlgorithmException
import java.security.SecureRandom
import java.security.cert.CertificateException
import java.security.cert.X509Certificate


class TrustAllPlugin implements Plugin<Project> {
    void apply(Project project) {
        HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
            @Override
            boolean verify(String hostname, SSLSession session) {
                // 不校验
                return true;
            }
        })
        SSLContext context = SSLContext.getInstance("SSL");
        TrustManager tm = new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
            }

            @Override
            public void checkServerTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException {
            }

            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };
        TrustManager[] tms = new TrustManager[1]
        tms[0] = tm
        context.init(null, tms, null);
        HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory()) // 设置全局的默认SSL处理方式
    }
}

allprojects {
    apply plugin: TrustAllPlugin
}

gradle.properties

配置代理,使得可以访问国外网络,懂的自然懂。

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=1080
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=1080

# 需要验证时
# systemProp.https.proxyUser=userid
# systemProp.https.proxyPassword=password

# 直接连接而不走代理设置
systemProp.https.nonProxyHosts=localhost|*.aliyun.com

总结

最初下载源码后就直接同步,然后报错无法下载相关文件,搞到后面突然想到回退到一个没有这个依赖的版本,然后就解决了问题。

最后来看看这美美的结果,哈哈哈,太高兴了,Nice。
记录下自己编译Spring5源码的过程(一)之处理依赖问题_第1张图片

你可能感兴趣的:(Java)