web-dev-qa-db-fra.com

Configuration du proxy Gradle

J'ai besoin d'un accès Web de Gradle via un serveur proxy pour utiliser l'intégration Gradle/Artifactory pour Jenkins. Pour réduire les causes possibles de problèmes, j'ai ajouté manuellement le plug-in Artifactory dans build.gradle et exécuté à 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"
}

Après this description, j’ai spécifié ce qui suit dans .gradle/gradle.properties de 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), il échoue:

11: 33: 17.699 [ERREUR] [org.gradle.BuildExceptionReporter] Causée 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 parmi lesquels choisir, et l'un répond toujours avec 407 (authentification proxy requise), l'autre avec 502 (passerelle Bad); les options proxyHost et proxyPort sont donc évidemment utilisées.

Comme le nom d'utilisateur (basé sur un utilisateur Active Directory) contient une barre oblique inversée, j'ai essayé à la fois \\ et \, mais cela n'a pas 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, je dois donc pouvoir spécifier un autre utilisateur.

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

115
Daniel Beck

À l’aide d’un programme Java "{very)} _ simple" "Demander une URL", j’ai pu reproduire 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 didacticiel Gradle ; même si le manuel de Gradle les mentionne.

Il semble que les programmes Java souhaitant prendre en charge l’authentification de proxy doivent le faire manuellement (et j’ai pu le faire à l’aide du code de la page liée).


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

22
Daniel Beck

Raffinement à propos de la réponse de Daniel: 

Configuration du proxy HTTP uniquement

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

HTTPS uniquement Configuration du proxy

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

Configuration du 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 utilisateur et 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 = pass -Dhttp.proxyUser = utilisateur -Dhttp.proxyPassword = pass

a travaillé pour moi (avec gradle.properties dans le répertoire homedir ou project, la construction échouait toujours). Merci d’avoir signalé le problème qui a permis cette solution de contournement.

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

175
Guillaume Berche

Ceci est mon gradle.properties, s'il vous plaît noter les HTTPS

systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=8118
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=8118
44
Kampau Ocu

Dans mon build.gradle, j'ai la tâche suivante, qui utilise les paramètres de proxy linux habituels, HTTP_PROXY et HTTPS_PROXY, à partir de l'environnement de 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
42
SourceSimian

Essayez ce qui suit:

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

23
Raphael Vitor

Pour moi, travaille en ajoutant cette configuration dans le fichier gradle.properties du projet, où se trouve le fichier 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

Où: ProxyUrl est l'URL du serveur proxy ( http: // .... .)

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

USER est mon utilisateur de domaine

MOT DE PASSE, mon mot de passe

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

19
rtrujillor

Créez un fichier appelé gradle.properties dans le dossier du projet où le fichier build.gradle est présent. Ajouter l'entrée 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 le proxy, ajoutez-le comme systemProp.https.proxyHost=www.proxysite.com

Pour IP, spécifiez simplement l'adresse IP avec http:// ou https://
Consultez gradle official doc pour plus de détails et la configuration du proxy au niveau mondial

10
user2720864

Basé sur la réponse de SourceSimian; cela a fonctionné sur les comptes d'utilisateur de domaine Windows. Notez que Nom d'utilisateur n'a pas le domaine est 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
6
Kunal B.

Départ à c:\Utilisateurs\votre nom d'utilisateur\.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>
4
Charles Tempo

Gradle peut être utilisé derrière un proxy de deux manières:

Ajouter des arguments en ligne de commande

(Extrait du message 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 de Gradle

dans gradle.properties.__, ajoutez 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 reporter à la documentation officielle https://docs.gradle.org/current/userguide/build_environment.html

1
Thibault

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

Les éléments suivants définissent le nom d'utilisateur et le mot de passe s'ils sont fournis ou ajoutent simplement l'hôte et le port si aucun nom d'utilisateur ni 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())
        }
    }
}
1
Norbert

Au cas où j'essayerais de configurer un proxy à partir du studio Android Apparence & Comportement => Paramètres système => Proxy HTTP. Mais le proxy n’ayant pas fonctionné, je ne clique sur aucun proxy.

Vérifier NO PROXY ne supprimera pas le paramètre de proxy du fichier gradle.properties (global). 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
Anirban

Si vous utilisez un proxy et utilisez Eclipse, accédez à Window Menu --> Preferences --> General --> Network Connections. Sélectionnez les fournisseurs actifs en tant que «Manuel».

Sous la section Entrées proxy, cliquez sur HTTPS, cliquez sur Modifier et ajoutez un hôte et un port proxy. Si un nom d'utilisateur et un mot de passe sont requis, indiquez-le également. Cela a fonctionné pour moi!

0
whoami

Si ce problème avec l'erreur HTTP 407 s'est produit uniquement avec les packages sélectionnés, le problème ne réside pas dans les paramètres de proxy ni dans la connexion Internet. Vous pouvez même exposer votre PC à Internet via NAT tout en faisant face à ce problème. Généralement, vous pouvez également télécharger les packages souhaités dans le navigateur ... La seule solution que je trouve: supprimez le dossier .gradle de votre profil (pas dans le projet). Après cette synchronisation du projet, cela prendra beaucoup de temps, mais tout sera restauré.

0
Almaz