Настройка прокси Gradle - PullRequest
133 голосов
/ 13 мая 2011

Мне нужен веб-доступ из Gradle через прокси-сервер, чтобы использовать интеграцию Gradle / Artifactory для Jenkins. Чтобы уменьшить возможные причины проблем, я вручную добавляю плагин Artifactory в build.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.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 ( Bad gateway ), поэтому очевидно, используются параметры proxyHost и proxyPort.

Поскольку имя пользователя (на основе пользователя Active Directory) содержит обратную косую черту, я пробовал оба \\ и \, но ни один из них не работал. Указанный пользователь отличается от пользователя, вошедшего в систему на компьютере и в Active Directory. Учетные данные этого пользователя недопустимы для прокси, поэтому мне нужно иметь возможность указать другого пользователя.

Сработала установка тех же параметров в графическом интерфейсе Дженкинса или Артефактуры.

Ответы [ 14 ]

190 голосов
/ 26 марта 2014

Уточнение ответа Даниила:

Конфигурация прокси только 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 = пользователь -Dhttps.proxyPassword = pass -Dhttp.proxyUser = пользователь -Dhttp.proxyPassword = pass

работал для меня (с gradle.properties в директории homedir или project, сборка все еще не выполнялась). Спасибо, что указали на проблему в gradle, которая дала этот обходной путь.

Обновление Вы также можете поместить эти свойства в gradle-wrapper.properties (см .: https://stackoverflow.com/a/50492027/474034).

51 голосов
/ 06 мая 2016

Это мои 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
43 голосов
/ 10 ноября 2015

В моем build.gradle у меня есть следующая задача, которая использует обычные настройки прокси-сервера linux HTTP_PROXY и HTTPS_PROXY из оболочки 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
23 голосов
/ 15 декабря 2014

Попробуйте следующее:

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

22 голосов
/ 08 сентября 2016

Для меня работает добавление этой конфигурации в файл 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 одинаков

22 голосов
/ 13 мая 2011

Используя очень простую Java-программу "Запрос URL", я смог воспроизвести проблему.

http.proxyUser и http.proxyPassword кажутся нестандартными, хотяпопулярные опции, так как они не описаны в справочной странице по Java, связанной с учебником Gradle ;хотя руководство Gradle упоминает о них.

Кажется, что Java-программам, которые хотят поддерживать аутентификацию прокси , нужно сделать это вручную (и я смог сделать это, используя код на связанной странице).


Я отправил эту проблему (и исправление) на систему отслеживания проблем Gradle .Поднятая проблема GRADLE-1556 была решена в 1.0-milestone-8 (Feb 2012)

10 голосов
/ 03 сентября 2018

Выезд на 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>
10 голосов
/ 08 ноября 2017

Создайте файл с именем 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 просто укажите IP без http:// или https://
Проверьте официальный документ для получения дополнительной информации и настройки прокси на глобальном уровне

6 голосов
/ 28 декабря 2017

На основании ответа 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
1 голос
/ 26 марта 2018

Обновление ответов @ sourcesimian и @ kunal-b * , которое динамически устанавливает имя пользователя и пароль, если настроено в системных свойствах.

Следующее задает имя пользователя и пароль, если они указаны, или просто добавляет хост и порт, если имя пользователя и пароль не установлены.

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())
        }
    }
}
...