缘起
这段时间一直接触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。