Gradle代理配置

Dan*_*eck 145 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"
}
Run Code Online (Sandbox Code Playgroud)

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

systemProp.http.proxyHost=hostname
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=de\\username
systemProp.http.proxyPassword=xxx
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

Gui*_*che 198

对Daniel的回应进行了改进:

HTTP Only Proxy配置

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 =通

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

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

  • 如果将属性放入`〜/ .gradle/gradle.properties`,请确保在属性前添加`systemProp`,例如`systemProp.http.proxyHost = 127.0.0.1` (9认同)
  • 你如何删除代理? (5认同)
  • 使用cntlm时也帮助了我 (4认同)
  • 还-Dhttps.proxyUser = user -Dhttps.proxyPassword = pass (2认同)
  • 我试过这个,但对我不起作用。我必须将选项(`-Dhttp.proxyHost` 等)设置为 `JAVA_OPTS` 环境变量才能使其工作。 (2认同)

小智 54

这是我的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
Run Code Online (Sandbox Code Playgroud)


小智 50

在我的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
Run Code Online (Sandbox Code Playgroud)

  • 好有趣!它是你的root的build.gradle或app的build.gradle? (2认同)

rtr*_*lor 24

对我来说,可以在项目的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
Run Code Online (Sandbox Code Playgroud)

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

proxyPort是端口(通常是8080)

USER是我的域用户

密码,我的密码

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


小智 23

请尝试以下方法:

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

  • 考虑问这个问题的时候.我在回答中链接的问题标记为Gradle 1.0-milestone-8 ... (2认同)
  • @Daniel这个问题是弹出的第一件事,当我搜索“等级代理”时,我略过了答案,而那个是我需要的最清晰的答案... (2认同)

Dan*_*eck 22

使用一个非常简单的"请求URL"Java程序,我能够复制该问题.

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

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


我将此问题(和修复)提交给Gradle问题跟踪器.提出问题GRADLE-1556在1.0-milestone-8(2012年2月)得到解决


Cha*_*mpo 14

在c:\ Users \ your username \ .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>
Run Code Online (Sandbox Code Playgroud)

  • @MurrayFoxcroft您在哪里看到该答案中的链接? (4认同)

use*_*864 11

创建一个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
Run Code Online (Sandbox Code Playgroud)

如果您使用DNS代理,请添加它 systemProp.https.proxyHost=www.proxysite.com

对于IP,只需指定IP out out http://https://
Check gradle官方文档以获取更多详细信息并在全局级别设置代理


Kun*_* B. 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
Run Code Online (Sandbox Code Playgroud)


Thi*_*ult 5

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

在命令行中添加参数

(摘自纪尧姆·伯奇的帖子)

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

-Dhttp.proxyHost=your_proxy_http_host -Dhttp.proxyPort=your_proxy_http_port
Run Code Online (Sandbox Code Playgroud)

或这些参数(如果您使用的是https):

-Dhttps.proxyHost=your_proxy_https_host -Dhttps.proxyPort=your_proxy_https_port
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

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


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