Конфигурация прокси-сервера Gradle


мне нужен веб-доступ из Gradle через прокси-сервер, чтобы использовать интеграцию Gradle/Artifactory для Jenkins. Чтобы уменьшить возможные причины проблем, я вручную добавляю плагин Artifactory в сборку.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 в.свойства в моем домашнем каталоге:

systemProp.http.proxyHost=hostname
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=deusername
systemProp.http.proxyPassword=xxx

с вышеуказанной конфигурацией прокси (которая, как известно, работает иначе), это не удается:

11:33:17.699 [ошибка] [орг.градля.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. Учетные данные этого пользователя не действительны для прокси-сервера, поэтому мне нужно указать другого пользователя.

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

14 105

14 ответов:

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

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

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

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

Это мой gradle.свойства, обратите внимание, что часть HTTPS

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8118
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8118

в своем 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

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

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

С помощью очень простая программа Java "Request a URL", я смог реплицировать проблему.

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

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


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

для меня работает добавление этой конфигурации в gradle.файл свойств проекта, в котором выполняется сборка.файл 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-это одно и то же

создайте файл с именем gradle.properties внутри папки проекта, где присутствует. Добавить следующую запись

     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 с out http:// или https://
Регистрация gradle official doc для более подробной информации и настройки прокси на глобальном уровне

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

есть 2 способа использования 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

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

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

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

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

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

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

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

проверка НЕТ ДОВЕРЕННОСТИ не будет удалять настройки прокси-сервера из градля.свойства(глобальные). Вам нужно вручную удалить его.

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

выезд в c:\Users\your имя пользователя\.Gradle в\градля.свойства:

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>