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 [错误] [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(坏网关),所以很明显,使用了proxyHost和proxyPort选项。

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

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


#1 热门回答(154 赞)

改善丹尼尔的回应:
仅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 =通

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

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


#2 热门回答(37 赞)

这是我的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

#3 热门回答(34 赞)

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