記錄下自己編譯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。
期待很久的結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章