我需要通过代理服务器从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的文件。属性。呈现Gradle文件。添加以下条目

     systemProp.http.proxyHost=proxy_url
     systemProp.http.proxyPort=proxy_port
     systemProp.http.proxyUser=USER
     systemProp.http.proxyPassword=PWD
     systemProp.https.proxyHost=proxy_url 
     systemProp.https.proxyPort=proxy_port
     systemProp.https.proxyUser=USER
     systemProp.https.proxyPassword=PWD

如果你使用DNS作为代理,那么像systemprop .http . proxyhost =www.proxysite.com一样添加它

对于IP,只需指定不带http://或https://的IP 查看gradle官方文档了解更多详细信息,并在全局级别设置代理

其他回答

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

如果这个HTTP错误407的问题只发生在选定的包上,那么问题不在于代理设置和internet连接。您甚至可以通过NAT将您的PC暴露在互联网上,仍然会面临这个问题。通常,您可以同时在浏览器中下载所需的软件包。 我发现唯一的解决办法是:删除配置文件中的.gradle文件夹(不是在项目中)。之后同步项目,这将花费很长时间,但恢复一切。

在 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 | >

在我的构建中。我有以下任务,它使用通常的linux代理设置,HTTP_PROXY和HTTPS_PROXY,从shell env:

task setHttpProxyFromEnv {
    def map = ['HTTP_PROXY': 'http', 'HTTPS_PROXY': 'https']
    for (e in System.getenv()) {
        def key = e.key.toUpperCase()
        if (key in map) {
            def base = map[key]
            def url = e.value.toURL()
            println " - systemProp.${base}.proxy=${url.host}:${url.port}"
            System.setProperty("${base}.proxyHost", url.host.toString())
            System.setProperty("${base}.proxyPort", url.port.toString())
        }
    }
}

build.dependsOn setHttpProxyFromEnv

编辑~/.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代理主机

这对我很管用。