我们的Android版本正在我们公司的CI构建代理上运行。这些没有Internet访问权限,必须从我们的Artifactory中的虚拟存储库中获取所有Maven依赖项。
我现在注意到所有构建都比我的PC上花了几分钟,显然延迟来自Gradle试图访问JCenter:
build 01-Apr-2019 11:56:44 11:56:43.449 [DEBUG] [org.apache.http.impl.execchain.MainClientExec] Opening connection {s}->https://jcenter.bintray.com:443
build 01-Apr-2019 11:56:44 11:56:43.452 [DEBUG] [org.apache.http.impl.conn.DefaultHttpClientConnectionOperator] Connecting to jcenter.bintray.com/18.195.111.75:443
build 01-Apr-2019 11:56:44 11:56:43.452 [DEBUG] [org.apache.http.conn.ssl.SSLConnectionSocketFactory] Connecting socket to jcenter.bintray.com/18.195.111.75:443 with timeout 30000
build 01-Apr-2019 11:56:44 11:56:43.453 [DEBUG] [org.apache.http.impl.conn.DefaultHttpClientConnectionOperator] Connect to jcenter.bintray.com/18.195.111.75:443 timed out. Connection will be retried using another IP address
build 01-Apr-2019 11:56:44 11:56:43.454 [DEBUG] [org.apache.http.impl.conn.DefaultHttpClientConnectionOperator] Connecting to jcenter.bintray.com/35.156.75.35:443
build 01-Apr-2019 11:56:44 11:56:43.454 [DEBUG] [org.apache.http.conn.ssl.SSLConnectionSocketFactory] Connecting socket to jcenter.bintray.com/35.156.75.35:443 with timeout 30000
当然,这不起作用,但Gradle似乎一遍又一遍地重试,直到它最终放弃。然后构建仍然有效,因为所有依赖项都可以在Artifactory中使用...
这就是我们当前为Gradle配置存储库的方式:
repositories {
def artifactoryBaseUrl = "https://artifactory.somecompany.com"
maven {
url "${artifactoryBaseUrl}/libs-release-local"
}
maven {
url "${artifactoryBaseUrl}/google-maven"
}
maven {
url "${artifactoryBaseUrl}/fabric-maven"
}
maven {
url "${artifactoryBaseUrl}/maven-central"
}
maven {
url "${artifactoryBaseUrl}/gradle-plugins"
}
maven {
url "${artifactoryBaseUrl}/jitpack-maven"
}
}
正如你所看到的,根本没有提到JCenter - Gradle如何决定它是否想要访问它并且有什么方法可以禁用它?
我在日志中的某个地方看到了这个,但不知道它来自哪里:
build 01-Apr-2019 11:40:23 11:40:22.351 [DEBUG] [org.gradle.api.internal.artifacts.ivyservice.modulecache.ResolvedArtifactCaches] Creating new in-memory cache for repo 'BintrayJCenter' [1dd858de07b774d6be9d3e38c5646087].
Gradle构建只有一个默认存储库:用于解析Gradle插件的Gradle插件门户,它只能用于解析构建脚本classpath
依赖项而不是项目依赖项。
如果您看到您的构建试图访问JCenter,那么导入的构建文件或插件很可能是其来源。