217 votes

Configuration du proxy Gradle

J'ai besoin d'un accès web à Gradle à travers 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 je l'exécute en 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 este description J'ai spécifié ce qui suit dans .gradle/gradle.properties 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 (dont on sait par ailleurs qu'elle fonctionne), il échoue :

11:33:17.699 [ERROR] [org.gradle.BuildExceptionReporter] Caused by : java.io.IOException : Le serveur a renvoyé un 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 le choix entre deux serveurs proxy, et l'un d'eux répond toujours par 407 ( Authentification du proxy requise ), l'autre avec 502 ( Mauvaise passerelle ), les options proxyHost et proxyPort sont évidemment utilisées.

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

La définition des mêmes options dans l'interface graphique de Jenkins ou d'Artifactory a fonctionné.

24voto

Raphael Vitor Points 568

Essayez ce qui suit :

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

23voto

Daniel Beck Points 1446

L'utilisation d'un très simple programme Java "Request a URL", j'ai été en mesure de reproduire le problème.

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

Il semble que les programmes Java qui souhaitent prendre en charge l'authentification par proxy il faut le faire manuellement (et j'ai pu le faire en utilisant le code de la page liée).


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

13voto

user2720864 Points 6071

Créer un fichier appelé gradle.properties dans le dossier du projet où se trouve le 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 le DNS pour le proxy, ajoutez-le comme suit systemProp.https.proxyHost=www.proxysite.com

Pour l'IP, il suffit de spécifier l'IP sans http:// ou https://
Vérifier gradle official doc pour plus de détails et la mise en place d'un proxy au niveau global

10voto

Thibault Points 541

Il y a deux 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 de gradle

en 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 gradle.properties l'emplacement du fichier, veuillez vous référer à la documentation officielle https://docs.gradle.org/current/userguide/build_environment.html


EDIT : comme l'a dit @Joost : Un petit détail important que j'avais initialement négligé : l'avis que le nom d'hôte réel ne contient PAS http:// partie protocole de l'URL...

6voto

Kunal B. Points 391

D'après la réponse de SourceSimian, cela a fonctionné pour les comptes d'utilisateurs du domaine Windows. Notez que le Nom d'utilisateur n'est pas ont été inclus dans le domaine,

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X