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é.
À 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)
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 ).
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
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
Essayez ce qui suit:
gradle -Dhttp.proxyHost=yourProxy -Dhttp.proxyPort=yourPort -Dhttp.proxyUser=usernameProxy -Dhttp.proxyPassword=yourPassoword
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.
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
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
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>
Gradle peut être utilisé derrière un proxy de deux manières:
(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
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
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())
}
}
}
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
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!
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é.