Gradle代理配置

时间:2011-05-13 11:27:57

标签: java proxy active-directory windows-server-2008 gradle

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

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

this描述之后,我在主目录中的.gradle / gradle.properties中指定了以下内容:

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

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

  

11:33:17.699 [ERROR] [org.gradle.BuildExceptionReporter]引起:java.io.IOException:服务器返回HTTP响应代码:407为URL:http://gradle.artifactoryonline.com/gradle/plugins/org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle

我有两个代理服务器可供选择,一个总是以407需要代理身份验证)响应,另一个用502响应( Bad gateway < / em>),显然,使用了proxyHost和proxyPort选项。

由于用户名(基于Active Directory用户)包含反斜杠,我尝试了\\\,但都没有效果。指定的用户与登录到计算机和Active Directory的用户不同。此用户的凭据对代理无效,因此我需要能够指定其他用户。

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

16 个答案:

答案 0 :(得分:184)

改善丹尼尔的回应:

仅HTTP代理配置

  

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128

仅HTTPS代理配置

  

gradlew -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129

HTTP和HTTPS代理配置

  

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129

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

  

gradlew -Dhttp.proxyHost = 127.0.0.1 -Dhttp.proxyPort = 3128 -   Dhttps.proxyHost = 127.0.0.1 -Dhttps.proxyPort = 3129   -Dhttps.proxyUser = user -Dhttps.proxyPassword = pass   -Dhttp.proxyUser = user -Dhttp.proxyPassword = pass

为我工作(在homedir或项目目录中使用gradle.properties,构建仍然失败)。感谢您将问题指向gradle,从而为此提供了解决方法。

<强>更新 您还可以将这些属性放入gradle-wrapper.properties(请参阅:https://stackoverflow.com/a/50492027/474034)。

答案 1 :(得分:47)

这是我的gradle.properties,请注意那些HTTPS部分

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8118
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8118

答案 2 :(得分:42)

在我的build.gradle我有以下任务,它使用通常的linux代理设置HTTP_PROXYHTTPS_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

答案 3 :(得分:23)

尝试以下方法:

gradle -Dhttp.proxyHost=yourProxy -Dhttp.proxyPort=yourPort -Dhttp.proxyUser=usernameProxy -Dhttp.proxyPassword=yourPassoword

答案 4 :(得分:22)

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

http.proxyUserhttp.proxyPassword似乎是非标准的,尽管是受欢迎的选项,因为它们未在the Java reference page linked from the Gradle tutorial中描述;尽管Gradle手册提到了它们。

似乎Java程序希望支持代理身份验证need to do this manually(我能够使用链接页面上的代码执行此操作)。


我已将此问题(和修复程序)提交给the Gradle issue tracker。提出的问题GRADLE-1556在1.0-milestone-8(2012年2月)

中得到解决

答案 5 :(得分:21)

对我来说,可以在项目的gradle.properties文件中添加此配置,其中build.gradle文件为:

systemProp.http.proxyHost=proxyURL
systemProp.http.proxyPort=proxyPort
systemProp.http.proxyUser=USER
systemProp.http.proxyPassword=PASSWORD
systemProp.https.proxyHost=proxyUrl 
systemProp.https.proxyPort=proxyPort
systemProp.https.proxyUser=USER
systemProp.https.proxyPassword=PASSWORD

其中: proxyUrl是代理服务器的URL(http://....。)

proxyPort是端口(通常为8080)

USER是我的域用户

密码,我的密码

在这种情况下,http和https的代理是相同的

答案 6 :(得分:10)

在项目文件夹中创建一个名为gradle.properties的文件,其中存在build.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.https.proxyHost=www.proxysite.com

对于IP,只需指定不带http://https://的IP
检查gradle official doc以获取更多详细信息并在全局级别设置代理

答案 7 :(得分:8)

在以下位置签出     c:\ Users \您的用户名\ .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>

答案 8 :(得分:6)

基于SourceSimian的回复;这适用于Windows域用户帐户。请注意,用户名 包含域名

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())
            System.setProperty("${base}.proxyUser", "Username")
            System.setProperty("${base}.proxyPassword", "Password")
        }
    }
}
build.dependsOn setHttpProxyFromEnv

答案 9 :(得分:1)

在代理后面使用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

(对于gradle.properties文件位置,请参阅官方文档https://docs.gradle.org/current/userguide/build_environment.html

@Joost所说的

编辑:: 我最初忽略的一个小而重要的细节:请注意实际主机名不包含 http://协议部分的网址...

答案 10 :(得分:1)

@sourcesimian 's@kunal-b's答案的更新,如果在系统属性中配置,则动态设置用户名和密码。

以下设置用户名和密码(如果提供)或仅添加主机和端口(如果未设置用户名和密码)。

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]
            //Get proxyHost,port, username, and password from http system properties 
            // in the format http://username:password@proxyhost:proxyport
            def (val1,val2) = e.value.tokenize( '@' )
            def (val3,val4) = val1.tokenize( '//' )
            def(userName, password) = val4.tokenize(':')
            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())
            System.setProperty("${base}.proxyUser", userName.toString())
            System.setProperty("${base}.proxyPassword", password.toString())
        }
    }
}

答案 11 :(得分:0)

如果您支持代理并使用eclipse,请转到Window Menu --> Preferences --> General --> Network Connections。选择Active Providers为“Manual”。

在“代理条目”部分下,单击“HTTPS”,然后单击“编辑”并添加代理主机&amp;港口。如果需要用户名和密码,也请提供。它对我有用!

答案 12 :(得分:0)

如果HTTP错误407的问题仅发生在选定的软件包上,则问题不在代理设置和Internet连接中。您甚至可能通过NAT将您的PC暴露在互联网上,但仍然会遇到此问题。通常,您可以在浏览器中同时下载所需的包。 我找到的唯一解决方案:删除配置文件中的.gradle文件夹(不在项目中)。在同步项目之后,需要很长时间才能恢复所有内容。

答案 13 :(得分:0)

如果我尝试从android studio外观和放大器设置代理行为=&gt;系统设置=&gt; HTTP代理。但代理没有成功,所以我点击没有代理。

  

检查 NO PROXY 不会从中删除代理设置   gradle.properties(全球)。您需要手动删除它。

所以我删除所有以 systemProp 开头的属性,例如 - systemProp.http.nonProxyHosts = * .local,localhost

答案 14 :(得分:0)

如果您使用的是 flutter,请在 android/gradle.properties

中添加以下行
systemProp.http.nonProxyHosts=*.local, localhost

答案 15 :(得分:0)

编辑您的 ~/.gradle/gradle.properties 文件,然后添加以下内容:

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 代理主机

它对我有用。