Подтвердить что ты не робот

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"
}

Следуя 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), поэтому, очевидно, используются параметры proxyHost и proxyPort.

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

Настройка тех же параметров в графическом интерфейсе Jenkins или Artifactory работала.

4b9b3361

Ответ 1

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

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

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


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

Ответ 2

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

Конфигурация прокси только 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 -Dhttp s.proxyPort = 3129 -Dhttp s.proxyUser = пользователь -Dhttp s.proxyPassword = pass [ CN00].proxyUser = пользователь -Dhttp.proxyPassword = проход

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

Обновление Вы также можете поместить эти свойства в gradle-wrapper.properties (см. fooobar.com/questions/5832467/...).

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

Для меня эта работа добавлена ​​в файл 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)

ПОЛЬЗОВАТЕЛЬ - пользователь моего домена

ПАРОЛЬ, мой пароль

В этом случае прокси для http и https одинаковый

Ответ 7

Создайте файл с именем gradle.properties в папке проекта, в которой build.gradle файл 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://
Для получения более подробной информации обратитесь к официальному документу Gradle и настройте прокси на глобальном уровне.

Ответ 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>

Ответ 9

Основано на ответе 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

Ответ 10

Существует два способа использования 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 файла gradle.properties см. в официальной документации https://docs.gradle.org/current/userguide/build_environment.html.


РЕДАКТИРОВАТЬ: как сказал @Joost: небольшая, но важная деталь, которую я изначально упустил из виду: обратите внимание, что фактическое имя хоста НЕ содержит http:// часть протокола URL...

Ответ 11

Обновление ответов @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:[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())
        }
    }
}

Ответ 12

Если вы находитесь за прокси-сервером и используете eclipse, перейдите к Window Menu --> Preferences --> General --> Network Connections. Выберите "Активные поставщики" как "Руководство".

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

Ответ 13

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

Ответ 14

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

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

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

Ответ 15

Вы должны добавить следующую конфигурацию в gradle.configuration Это параметры прокси, которые необходимо настроить, если вы работаете за прокси.

Источник: (https://docs.gradle.org/current/userguide/build_environment.html#sec:accessing_the_web_via_a_proxy)

И не добавить "http.//или„https:“в systemProp.http.proxyHost только„www.host.com“.Также закомментируйте systemProp.http.proxyUser или proxypassword, если вам не нужно войти в прокси.

systemProp.proxySet=true
systemProp.http.keepAlive=true
systemProp.http.proxyHost=www.host.com
systemProp.http.proxyPort=port
systemProp.http.proxyUser=username_ifneeded
systemProp.http.proxyPassword=password_needed
systemProp.http.nonProxyHosts=local.net|some.host.com

systemProp.https.keepAlive=true
systemProp.https.proxyHost=host
systemProp.https.proxyPort=port
systemProp.https.proxyUser=username_ifneeded
systemProp.https.proxyPassword=password_ifneeded
systemProp.https.nonProxyHosts=local.net|some.host.com