緣起
這段時間一直接觸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。