Конфігурація проксі Gradle


161

Мені потрібен веб-доступ від 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( Неправильний шлюз ), тому, очевидно, використовуються параметри proxyHost і proxyPort.

Оскільки ім’я користувача (засноване на користувачі Active Directory) містить зворотну косу рису, я спробував \\і те \, і не працювало. Зазначений користувач відрізняється від користувача, який увійшов до машини та Active Directory. Дані користувача не є дійсними для проксі, тому мені потрібно мати змогу вказати іншого користувача.

Налаштування однакових варіантів у графічному інтерфейсі Дженкінса або Артефактика працювало.


1
маючи ту саму проблему, жоден із відповідей тут не допоміг (навіть ті, що слідують за устареними / непридатними методами). Потім я зрозумів , HTTPS проксі - сервер повинен бути встановлений: stackoverflow.com/a/27686730/1024839
hkoosha

Ви повинні переглянути цю URL-адресу, більш повну та оновлену (з http та https): docs.gradle.org/current/userguide/…
Гійом Хуста

@GuillaumeHusta Дякую, але зауважте, це питання було розміщено більше 5 років тому, коли Gradle 0.8 був останнім випуском, а документація щодо цього була просто невірною (див. Мою власну відповідь на це запитання).
Даніель Бек

У мене була ця проблема під час використання лапок у проксі, використовуйте systemProp.http.proxyHost = xyz не systemProp.http.proxyHost = 'xyz'
ir2pid

Відповіді:


211

Уточнення відповіді Даніеля:

Конфігурація проксі-сервера лише HTTP

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 "-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost"

Конфігурація HTTPS-проксі

gradlew -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129 "-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost"

Конфігурація HTTP і HTTPS Proxy

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129 "-Dhttp.nonProxyHosts=*.nonproxyrepos.com|localhost"

Конфігурація проксі з користувачем та паролем

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.proxyUser = користувач -Dhttp. proxyPassword = pass -Dhttp.nonProxyHosts = host1.com | host2.com

працював для мене (з gradle.propertiesабо homedir, або з режисером проекту, збірка все ще не вдавалася). Дякуємо, що вказали на проблему в gradle, яка дала цю проблему. Перегляньте довідковий документ на веб-сторінці https://docs.gradle.org/current/userguide/build_environment.html#sec:accessing_the_web_via_a_proxy

Оновлення Ви також можете розмістити ці властивості gradle-wrapper.properties(див. Https://stackoverflow.com/a/50492027/474034 ).


4
мені також допоміг під час використання cntlm
Łukasz Siwiński

5
як у вас видалити проксі?
Джонатан

2
також -Dhttps.proxyUser = користувач -Dhttps.proxyPassword = пропуск
Оуен Б

10
Якщо ви встановите властивості, ~/.gradle/gradle.propertiesпереконайтеся, що ви маєте префікс властивостей systemProp, як, наприклад,systemProp.http.proxyHost=127.0.0.1
Стефан Хаберль

1
Я спробував це, і мені це не вийшло. Мені довелося встановити параметри ( -Dhttp.proxyHostі лайки) як JAVA_OPTSзмінну середовища, щоб змусити її працювати.
GoldenD

66

Це мій 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

55

У 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

2
Це весело! Це build.gradle вашого кореня або build.gradle програми?
Miao1007

1
Працює і в Windows 7! Це має бути прийнята відповідь!

1
Дякую! вище працювало для конфігурації, яка не потребує пароля проксі. Я змінив його для роботи з паролем проксі або без нього. Дивіться нижче
Норберт,

if (введіть у map.keySet ()) {
JustATHERCoder

найкраща відповідь. бажаю, щоб екосистема Java працювала так, як це було з вікна
Авіндра Голчаран

26

Для мене працює додавання цієї конфігурації у файл 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 є однаковим


23

Спробуйте наступне:

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


2
Подумайте, коли це питання було задано. Питання, на яке я посилаюсь у своїй відповіді, було позначене вирішеним у напрямку Gradle 1.0-віха-8…
Даніель Бек

2
@Daniel це питання було першим, що спливе, коли я шукав "gradle proxy", я перебирав відповіді, і той був
найяснішим

22

Використовуючи дуже просту програму Java "Запити URL", я зміг повторити проблему.

http.proxyUserі, http.proxyPasswordздається, є нестандартними, хоч і популярними, варіантами, оскільки вони не описані на довідковій сторінці Java, пов’язаній із підручника Gradle ; незважаючи на те, що керівництво Gradle згадує їх.

Здається, програми Java, які хочуть підтримувати автентифікацію проксі, повинні зробити це вручну (і мені вдалося це зробити за допомогою коду на пов'язаній сторінці).


Я надіслав цю проблему (і виправлення) трекеру проблем Gradle . Підняте питання GRADLE-1556 було вирішено в 1,0-етапі-8 (лютий 2012)


Зв'язаний блок розглядається як запрошення. Чи є публічний приклад цього рішення?
Майк Йокі

@yock Дивіться вкладення випуску, який я подав Gradle, дуже схоже.
Даніель Бек

19

Перевірте в 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 seperated by | >

5
@MurrayFoxcroft Де ви бачите посилання у цій відповіді?
Макс Волмер

В основному посилання на локальну машину та дамп файлу. Будь ласка, опишіть відповідь більш докладно.
Мюррей Фокскрофт

superrrrrr tnx, ти можеш не усвідомлювати, наскільки корисний ур-пост був для мене, але все-таки велике спасибі
Seyed Ali Roshan

@SeyedAliRoshan Як ми можемо передавати proxyUser та пароль за аргументом? я не хочу користувачеві файл globle gradle.propaerties.
Nullpointer

@Nullpointer ти намагався використовувати налаштування проксі всередині градації вашого проекту?
Сіє Алі Рошан

12

Створіть файл, який називається 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-адресу з Out http://або https://
Check Gradle official doc для отримання більш детальної інформації та налаштування проксі на глобальному рівні


9

Є два способи використання 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


EDIT: як сказав @Joost: Невелика, але важлива деталь, яку я спочатку не помітив: зауважте, що власне ім'я хоста НЕ містить http:// протокольної частини URL-адреси ...


1
Невелика, але важлива деталь, яку я спочатку не помітив: зауважте, що власне ім’я хоста НЕ містить http://протокольну частину URL-адреси ...
Joost,

5

На основі відповіді 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

У випадку, якщо я намагаюся налаштувати проксі-сервер від андроїд-студії «Зовнішній вигляд і поведінка» => Налаштування системи => HTTP-проксі. Але проксі не вийшло, тому я не натискаю проксі.

Якщо встановити прапорець NO PROXY , не буде видалено налаштування проксі-сервера з gradle.properties (Global). Видалити її потрібно вручну.

Тому я видаляю всі властивості, починаючи, наприклад, з systemProp - systemProp.http.nonProxyHosts = *. Local, localhost


Я зірвав волосся протягом години, мабуть, на Mac, ці властивості були додані до моїх ~/.gradle/gradle.properties. Дякуємо, що вказали на це.
EpicPandaForce

1

Оновлення відповіді @sourcesimian's і @ 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())
        }
    }
}

0

Якщо ви за проксі-сервером і використовуєте затемнення, перейдіть до Window Menu --> Preferences --> General --> Network Connections. Виберіть Активних постачальників як "Посібник".

У розділі Проксі-записи натисніть HTTPS, натисніть Редагувати та додайте хост-порт проксі. Якщо потрібні ім’я користувача та пароль, вкажіть це також. Це працювало для мене!


0

Якщо ця проблема із помилкою HTTP 407 трапилася лише для вибраних пакетів, проблема не в налаштуваннях проксі та підключенні до Інтернету. Ви навіть можете відкрити свій комп'ютер в Інтернеті через NAT і все одно зіткнетеся з цією проблемою. Зазвичай одночасно ви можете завантажувати потрібні пакети в браузер. Єдине рішення, яке я знаходжу: видалити папку .gradle у своєму профілі (не в проекті). Після цього синхронізуйте проект, пройде багато часу, але відновіть усе.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.