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é.
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).
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
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
Essayez ce qui suit:
gradle -Dhttp.proxyHost=yourProxy -Dhttp.proxyPort=yourPort -Dhttp.proxyUser=usernameProxy -Dhttp.proxyPassword=yourPassoword
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)
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
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
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
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
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!
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.
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())
}
}
}
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
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>