我的 gradle 项目使用内部公司工件注册表和
mavenCentral()
。
我需要让它在新计算机上工作,Gradle 从 7.3 升级到 8 版本,并遵循严格的公司政策,互联网连接通过公司互联网代理。
曾经在旧配置上运行的 gradle 构建突然停止运行并出现错误:
Execution failed for task ':app:generateJavaClasses'.
> Could not resolve all files for configuration ':app:jaxb'.
> Could not resolve org.glassfish.jaxb:jaxb-core:2.3.0.1.
Required by:
project :app
> Repository GitLab is disabled due to earlier error below:
> Could not resolve org.glassfish.jaxb:jaxb-xjc:4.0.5.
> Could not get resource 'https://our-registry.our-company/api/v4/projects/21/packages/maven/org/glassfish/jaxb/jaxb-xjc/4.0.5/jaxb-xjc-4.0.5.pom'.
> Could not GET 'https://our-registry.our-company/api/v4/projects/21/packages/maven/org/glassfish/jaxb/jaxb-xjc/4.0.5/jaxb-xjc-4.0.5.pom'. Received status code 503 from server: Service Unavailable
our-registry
的目的是提供我们的工件。它实际上不包含 JAXB 工件。注册表有意位于 mavenCentral()
之前。对于我们的注册表找不到 JAXB 工件,我并不感到惊讶,但我希望它在出现错误时转移到下一个存储库 (mavenCentral
)。
相反,它会失败并出现 HTTP 503 错误。存储库工作正常(经维护工程师确认)。这是怎么回事?
问题是互联网代理设置错误。 我在
systemProp.http.proxyHost=internet-proxy.our-company
中设置了系统变量 .gradle.properties
但忘记设置变量 systemProp.http.nonProxyHosts
。由于 our-registry.our-company
是一个 Intranet 站点,因此必须将其排除在 Internet 代理之外。代理在尝试访问 Intranet 站点时返回 503 错误,503 不是来自注册表。
使用出现
gradle --debug
的 2024-09-06T15:14:46.317+0200 [DEBUG] [org.apache.http.impl.execchain.MainClientExec] CONNECT refused by proxy: HTTP/1.1 503 Service Unavailable
选项很容易发现问题。
还值得注意的是,期望在 503 错误时回退到下一个存储库违反了构建可重复性的 gradle 理念。 这里有更详细的解释。