it-swarm-ru.tech

Настройка прокси Gradle

Мне нужен веб-доступ из 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. Учетные данные этого пользователя недопустимы для прокси, поэтому мне нужно иметь возможность указать другого пользователя.

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

115
Daniel Beck

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

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

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


Я отправил эту проблему (и исправление) в средство отслеживания проблем Gradle . Поднятая проблема GRADLE-1556 была решена в 1,0-миль-8 (февраль 2012 г.)

22
Daniel Beck

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

Конфигурация прокси только 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 = проход

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

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

175
Guillaume Berche

Это мои 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
44
Kampau Ocu

В моем 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
42
SourceSimian

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

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

23
Raphael Vitor

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

19
rtrujillor

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

10
user2720864

Основано на ответе SourceSimian; это работало на учетных записях пользователей домена Windows. Обратите внимание, что в Username нет включен домен,

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
6
Kunal B.

Проверьте в 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>
4
Charles Tempo

Существует два способа использования Gradle за прокси-сервером:

Добавить аргументы в командной строке

(Из поста Гийома Берша) 

Добавьте эти аргументы в вашу команду 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

1
Thibault

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

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

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:[email protected]: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())
        }
    }
}
1
Norbert

В случае, если я пытаюсь настроить прокси из Android студии Внешний вид и поведение => Системные настройки => HTTP прокси. Но прокси не сработал, поэтому я нажимаю не прокси.

Проверка NO PROXY не удалит настройку прокси из gradle.properties (Global). Вы должны удалить его вручную.

Поэтому я удаляю все свойства, начинающиеся с systemProp например - systemProp.http.nonProxyHosts = *. Local, localhost

0
Anirban

Если вы используете прокси-сервер и используете Eclipse, перейдите на Window Menu --> Preferences --> General --> Network Connections. Выберите активных поставщиков как «Вручную».

В разделе «Записи прокси» нажмите HTTPS, нажмите «Изменить» и добавьте прокси-сервер и порт. Если требуются имя пользователя и пароль, укажите это также. Это сработало для меня!

0
whoami

Если эта проблема с ошибкой HTTP 407 произошла только с выбранными пакетами, то проблема не в настройке прокси-сервера и интернет-соединении. Вы даже можете выставить свой компьютер в Интернет через NAT и все равно столкнетесь с этой проблемой. Обычно в это же время вы можете загрузить нужные пакеты в браузере .. Единственное решение, которое я нахожу: удалите папку .gradle в своем профиле (не в проекте). После синхронизации проекта это займет много времени, но все восстановится.

0
Almaz