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



Answers

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

Мне нужен веб-доступ от 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.




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

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




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

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

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



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




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



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




Links