我需要通过代理服务器从Gradle访问web,以使用Gradle/Artifactory集成的Jenkins。为了减少可能导致问题的原因,我在构建中手动添加了Artifactory插件。Gradle并从命令行运行它:

apply {
    apply from: "http://gradle.artifactoryonline.com/gradle/plugins/org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle"
}

在此描述之后,我在.gradle/gradle中指定了以下内容。在我的主目录中的属性:

systemProp.http.proxyHost=hostname
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=de\\username
systemProp.http.proxyPassword=xxx

使用上面的代理配置(否则已知工作),它会失败:

11:33:17.699[错误][org.gradle.]导致:java.io.IOException:服务器返回HTTP响应代码:407 for URL: http://gradle.artifactoryonline.com/gradle/plugins/org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle

我有两个代理服务器可以选择,一个总是响应407(需要代理身份验证),另一个响应502(坏网关),因此显然,使用了proxyHost和proxyPort选项。

由于用户名(基于Active Directory用户)包含反斜杠,我同时尝试了\\和\,但都不起作用。指定的用户与已登录计算机和Active Directory的用户不同。这个用户的凭据对代理无效,所以我需要能够指定一个不同的用户。

在Jenkins或Artifactory的GUI中设置相同的选项也可以。


当前回答

有两种方法在代理后使用Gradle:

在命令行中添加参数

(摘自Guillaume Berche的帖子)

在gradle命令中添加以下参数:

-Dhttp.proxyHost=your_proxy_http_host -Dhttp.proxyPort=your_proxy_http_port

或者如果你使用HTTPS,这些参数:

-Dhttps.proxyHost=your_proxy_https_host -Dhttps.proxyPort=your_proxy_https_port

在gradle配置文件中添加行

在gradle.properties 增加以下几行:

systemProp.http.proxyHost=your_proxy_http_host
systemProp.http.proxyPort=your_proxy_http_port
systemProp.https.proxyHost=your_proxy_https_host
systemProp.https.proxyPort=your_proxy_https_port

(用于它。属性文件位置,请参考官方文档https://docs.gradle.org/current/userguide/build_environment.html


编辑:正如@Joost所说: 我一开始忽略了一个小而重要的细节:注意实际的主机名不包含URL的http://协议部分…

其他回答

在 c:\Users\your用户名\ .gradle \ gradle.properties:

systemProp.http.proxyHost=<proxy host>
systemProp.http.proxyPort=<proxy port>
systemProp.http.proxyUser=<proxy user>
systemProp.http.proxyPassword=<proxy password>
systemProp.http.nonProxyHosts=<csv of exceptions>
systemProp.https.proxyHost=<proxy host>
systemProp.https.proxyPort=<proxy port>
systemProp.https.proxyUser=<proxy user>
systemProp.https.proxyPassword=<proxy password>
systemProp.https.nonProxyHosts=<csv of exceptions seperated by | >

使用一个非常简单的“请求一个URL”Java程序,我能够复制这个问题。

http。proxyUser和http。proxyPassword似乎不是标准的,尽管很流行,选项,因为它们没有在从Gradle教程链接的Java参考页面中描述;尽管Gradle手册提到了它们。

似乎希望支持代理身份验证的Java程序需要手动执行此操作(我可以使用链接页面上的代码来执行此操作)。


我向Gradle问题跟踪器提交了这个问题(和一个修复)。提出的问题GRADLE-1556在1.0-milestone-8中得到解决(2012年2月)

编辑~/.gradle/gradle。属性文件,然后添加以下内容:

org.gradle.jvmargs=-DsocksProxyHost\=127.0.0.1 -DsocksProxyPort\=1080 -DhttpProxyHost\=127.0.0.1 -DhttpProxyPort\=1081 -DhttpsProxyHost\=127.0.0.1 -DhttpsProxyPort\=1081

DsocksProxyHost是socks5代理主机 DhttpProxyHost是http代理主机 DhttpsProxyHost为https代理主机

这对我很管用。

细化丹尼尔的回答:

HTTP Only Proxy配置

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 “-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost”

仅代理配置

gradlew -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129 “-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost”

同时配置HTTP和HTTPS代理

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129 “-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost”

使用用户和密码进行代理配置

gradlew -Dhttp. proxyhost =127.0.0.1 -Dhttp. proxyhost =127.0.0.1proxyPort=3128 - Dhttps.proxyHost=127.0.0.1 - dhttps . proxyPort=3128proxyPort = 3129 -Dhttps。用户-Dhttps proxyUser =。proxyPassword =通过-Dhttp。用户-Dhttp proxyUser =。proxyPassword =通过-Dhttp.nonProxyHosts = host1.com | host2.com

为我工作(用gradle)。在homedir或项目目录中,构建仍然失败)。感谢您指出gradle的问题,提供了这个解决方案。参见参考文档https://docs.gradle.org/current/userguide/build_environment.html#sec:accessing_the_web_via_a_proxy

更新 您还可以将这些属性放入gradle-wrapper中。属性(参见:https://stackoverflow.com/a/50492027/474034)。

在我安装了一个旧版本的SDK并在.zshrc中设置JAVA_HOME后,我遇到了同样的问题,上面的解决方案都没有帮助我,但最终重新启动了COMPUTER(Mac),然后错误就消失了。