1. 概述
代理服务器充当客户端和服务器之间的中介。它根据某些标准帮助评估来自客户端的请求,然后将它们转发到目标服务器。这使得系统能够灵活地决定连接哪个网络或不连接。
在这个教程中,我们将学习如何配置 Gradle 以在代理服务器后工作。例如,我们的代理服务器运行在本地主机上,HTTP和HTTPS连接的代理端口都是 3128。
2. 代理配置
我们可以使用或不使用身份验证凭据来配置 Gradle 通过代理服务器工作。
2.1. 基本代理配置
首先,让我们在一个 Gradle 项目的根目录下创建一个名为 gradle.properties
的文件。
接下来,在 gradle.properties
文件中定义代理服务器的系统属性:
systemProp.http.proxyHost=localhost
systemProp.http.proxyPort=3128
systemProp.https.proxyHost=localhost
systemProp.https.proxyPort=3128
在这里,我们定义了 Gradle 在构建过程中会使用的系统属性。我们为 HTTP 和 HTTPS 连接都定义了系统属性。在这种情况下,它们的主机名和代理端口相同。
此外,我们可以在 gradle.properties
文件中指定一个主机名来跳过代理服务器:
systemProp.http.nonProxyHosts=*.nonproxyrepos.com
systemProp.https.nonProxyHosts=*.nonproxyrepos.com
在上述配置中,子域名 nonproxyrepos.com
将绕过代理服务器,直接从服务器请求资源。
或者,我们可以通过终端运行 ./gradlew build
命令,通过终端传递系统属性:
$ ./gradlew -Dhttp.proxyHost=localhost -Dhttp.proxyPort=3128 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=3128 build
这里,我们在终端命令中定义了连接到代理服务器的系统属性。
值得注意的是,通过终端定义系统属性会覆盖 gradle.properties
文件的配置。
2.2. 添加身份验证凭据
如果代理服务器受保护,我们可以在 gradle.properties
文件中添加身份验证凭据:
systemProp.http.proxyUser=Baeldung
systemProp.http.proxyPassword=admin
systemProp.https.proxyUser=Baeldung
systemProp.https.proxyPassword=admin
在这里,我们通过定义用户名和密码的系统属性来添加身份验证凭据。同时,我们也为 HTTP 和 HTTPS 连接实施了身份验证。
另外,我们也可以在终端命令中指定用户名和密码:
$ ./gradlew -Dhttp.proxyHost=localhost -Dhttp.proxyPort=3128 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=3128 -Dhttps.proxyUser=Baeldung -Dhttps.proxyPassword=admin build
在这里,我们在终端命令中包含了身份验证凭据。
3. 可能的错误
如果主机名和代理端口不正确,可能会出现错误:
> Could not get resource 'https://repo.maven.apache.org/maven2/io/micrometer/micrometer-core/1.12.0/micrometer-core-1.12.0.pom'.
> Could not GET 'https://repo.maven.apache.org/maven2/io/micrometer/micrometer-core/1.12.0/micrometer-core-1.12.0.pom'.
> localhosty: Name or service not known
这里,由于误写代理主机为“localhosty”而不是“localhost”,导致构建失败。
另外,如果在 gradle.properties
文件和命令行中都定义了系统属性,那么在构建过程中,命令行参数的定义具有最高优先级:
$ ./gradlew -Dhttp.proxyHost=localhost -Dhttp.proxyPort=3120 -Dhttps.proxyHost=localhost -Dhttps.proxyPort=3120 build
这里,命令行参数中的代理端口号是 3120,这是错误的。而 gradle.properties
文件中的代理端口号是正确的 3128。然而,由于命令行参数中的代理端口定义错误,构建失败并显示以下错误消息:
> Could not get resource 'https://repo.maven.apache.org/maven2/io/micrometer/micrometer-core/1.12.0/micrometer-core-1.12.0.pom'.
> Could not GET 'https://repo.maven.apache.org/maven2/io/micrometer/micrometer-core/1.12.0/micrometer-core-1.12.0.pom'.
> Connect to localhost:3120 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused
这里,代理服务器拒绝连接,因为尽管 gradle.properties
文件中的代理端口号正确,但命令行参数定义的值是错误的。命令行参数的定义优先于 gradle.properties
的值。
此外,如果在受保护的代理服务器上身份验证凭据错误,代理服务器也会拒绝连接。为了避免这些错误,必须正确检查配置。
4. 总结
在这篇文章中,我们了解了如何通过在 gradle.properties
文件中定义所需的系统属性来配置 Gradle 通过代理服务器工作。我们也看到了如何通过终端定义系统属性。最后,我们了解了一些容易犯的错误以及如何避免它们。
如往常一样,完整的示例代码可在 GitHub 上找到。