Configuration du proxy Gradle

J'ai besoin d'un accès web depuis Gradle via un serveur proxy pour utiliser L'intégration Gradle/Artifactory pour Jenkins. Pour réduire les causes possibles de problèmes, j'ajoute manuellement le plugin Artifactory dans build.gradle et exécutez-le à partir de la ligne de commande:

apply {
    apply from: "http://gradle.artifactoryonline.com/gradle/plugins/org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle"
}

Suivant Cette description j'ai spécifié ce qui suit dans .gradle / gradle.propriétés dans mon répertoire personnel:

systemProp.http.proxyHost=hostname
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=de\username
systemProp.http.proxyPassword=xxx

Avec la configuration de proxy ci-dessus (qui est connue pour fonctionner), elle échoue:

11:33:17.699 [erreur] [org.gradle.BuildExceptionReporter] causé par: java. io. IOException: le serveur a renvoyé le code de réponse HTTP: 407 pour L'URL: http://gradle.artifactoryonline.com/gradle/plugins/org/jfrog/buildinfo/build-info-extractor-gradle/1.0.1/artifactoryplugin-1.0.1.gradle

, j'ai deux serveurs proxy à choisir, et il répond toujours avec 407 (Proxy authentication required), l'autre avec 502 (Bad gateway), alors, évidemment, la les options proxyHost et proxyPort sont utilisées.

Comme le nom d'utilisateur (basé sur un utilisateur Active Directory) contient une barre oblique inverse, j'ai essayé \ et , mais aucun n'a fonctionné. L'utilisateur spécifié est différent de l'utilisateur connecté à la machine et à Active Directory. Les informations d'identification de cet utilisateur ne sont pas valides pour le proxy, donc je dois être en mesure de spécifier un utilisateur différent.

Définir les mêmes options dans L'interface graphique de Jenkins ou D'Artifactory a fonctionné.

105
demandé sur Daniel Beck 2011-05-13 15:27:57

14 réponses

Raffinement sur la réponse de Daniel:

Configuration du Proxy HTTP uniquement

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128

Configuration du Proxy HTTPS uniquement

gradlew -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129

Configuration des Proxy HTTP et HTTPS

gradlew -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=3128 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=3129

Configuration du Proxy avec l'utilisateur et le mot de passe

Gradlew-Dhttp.proxyHost=127.0.0.1-Dhttp.proxyPort = 3128 - Dhttps.proxyHost=127.0.0.1 - Dhttps.proxyPort = 3129 - Dhttps.proxyUser=utilisateur-Dhttps.proxyPassword=passer - Dhttp.proxyUser=utilisateur -Dhttp.proxyPassword=passer

A fonctionné pour moi (avec gradle.properties dans homedir ou project dir, la construction échouait toujours). Merci d'avoir signalé le problème à gradle qui a donné cette solution de contournement.

Mettre à jour Vous pouvez également mettre ces propriétés en gradle-wrapper.properties (voir: https://stackoverflow.com/a/50492027/474034).

158
répondu Guillaume Berche 2018-09-03 12:59:47

C'est mon gradle.propriétés, veuillez noter ces parties HTTPS

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8118
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8118
37
répondu Kampau Ocu 2016-05-06 18:54:02

Dans mon build.gradle j'ai la tâche suivante, qui utilise les paramètres proxy Linux habituels, HTTP_PROXY et HTTPS_PROXY, à partir de l'env shell:

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
34
répondu SourceSimian 2015-11-10 18:06:47

Essayez ce qui suit:

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

22
répondu Raphael Vitor 2014-12-15 19:24:11

En utilisant un programme Java Très simple "Request a URL", j'ai pu répliquer le problème.

http.proxyUser et http.proxyPassword semblent être des options non standard, bien que populaires, car elles ne sont pas décrites dans la page de référence Java liée au tutoriel Gradle ; même si le manuel Gradle les mentionne.

Il semble que les programmes Java qui souhaitent prendre en charge l'authentification proxy doivent le faire manuellement (et j'ai pu le faire en utilisant le code sur le lien page).


J'ai soumis ce problème (et un correctif) à le suivi des problèmes Gradle . Le problème soulevé GRADLE-1556 a été résolu dans 1.0-milestone-8 (février 2012)

21
répondu Daniel Beck 2016-11-10 08:28:09

Pour moi, fonctionne en ajoutant cette configuration dans le gradle.fichier de propriétés du projet, où la construction.le fichier gradle est:

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

Où : proxyUrl est l'url du serveur proxy (http://.....)

ProxyPort est le port (généralement 8080)

L'utilisateur est mon utilisateur de domaine

Mot de passe, mon mot de passe

Dans ce cas, le proxy http et https est le même

16
répondu rtrujillor 2016-09-08 13:57:09

Créez un fichier appelé gradle.properties dans le dossier de projet où le fichier build.gradle est présent. Ajouter la rubrique suivante

     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

Si vous utilisez DNS pour proxy, ajoutez-le comme systemProp.https.proxyHost=www.proxysite.com

Pour IP spécifiez simplement L'IP Sans http:// ou https://
Vérifiez gradle official doc pour plus de détails et la configuration du proxy au niveau global

7
répondu user2720864 2017-11-08 11:19:15

Basé sur la réponse de SourceSimian; cela a fonctionné sur les comptes d'utilisateurs de domaine Windows. Notez que le nom d'utilisateur n'a pas de domaine inclus,

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
5
répondu Kunal B. 2018-03-28 15:11:22

Il y a 2 façons d'utiliser Gradle derrière un proxy :

Ajouter des arguments dans la ligne de commande

(extrait du billet de Guillaume Berche)

Ajoutez ces arguments dans votre commande gradle:

-Dhttp.proxyHost=your_proxy_http_host -Dhttp.proxyPort=your_proxy_http_port

Ou ces arguments si vous utilisez https :

-Dhttps.proxyHost=your_proxy_https_host -Dhttps.proxyPort=your_proxy_https_port

Ajouter des lignes dans le fichier de configuration gradle

Dans gradle.properties ajouter les lignes suivantes:

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

(pour l'emplacement du fichier gradle.properties, Veuillez vous référer à la documentation officielle https://docs.gradle.org/current/userguide/build_environment.html

1
répondu Thibault 2018-02-02 12:00:32

Si vous êtes derrière le proxy et que vous utilisez eclipse, accédez à Window Menu --> Preferences --> General --> Network Connections. Sélectionnez les fournisseurs actifs comme "manuel".

Sous la section entrées Proxy, cliquez sur HTTPS, cliquez sur Modifier et Ajouter un hôte proxy et un port. Si le nom d'utilisateur et mot de passe sont requis, donner aussi. Il a travaillé pour moi!

0
répondu whoami 2015-08-13 09:57:05

Si ce problème avec L'erreur HTTP 407 est arrivé aux paquets sélectionnés seulement, le problème n'est pas dans le paramètre proxy et la connexion internet. Vous pouvez même exposer votre PC à internet via NAT et toujours faire face à ce problème. Typiquement, en même temps, vous pouvez télécharger les paquets souhaités dans le navigateur. La seule solution que je trouve: supprimer le .gradle dossier dans votre profil (pas dans le projet). Après cela, synchronisez le projet, cela prendra beaucoup de temps mais restaurez tout.

0
répondu Almaz 2017-11-03 12:51:27

Une mise à jour de la réponse @sourcesimian et @kunal-B qui définit dynamiquement le nom d'utilisateur et le mot de passe s'ils sont configurés dans les propriétés du système.

Ce qui suit définit le nom d'utilisateur et le mot de passe s'il est fourni ou ajoute simplement l'hôte et le port si aucun nom d'utilisateur et mot de passe n'est défini.

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
répondu Norbert 2018-03-26 18:14:56

Au cas où j'essaierais de configurer un proxy à partir d'Android Studio Appearance & Behaviour = > System Settings = > HTTP Proxy. Mais le proxy n'a pas fonctionné, donc je clique sur aucun proxy.

La vérification de aucun PROXY ne supprimera pas le paramètre proxy du gradle.propriétés(globales). Vous devez le supprimer manuellement.

Donc, je supprime toutes les propriétés commençant par systemProp par exemple - systemProp.http.nonProxyHosts=*.local, localhost

0
répondu Anirban 2018-05-15 13:03:41

Vérifier à c:\Users\your nom d'utilisateur\.gradle \ gradle.propriétés:

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>
0
répondu Charles Tempo 2018-09-03 14:17:36