Je souhaite partager mon expérience d'utilisation de maven via un proxy.
Vous feriez très probablement face à des exceptions et à des messages tels que:
Les métadonnées du référentiel pour: 'org.apache.maven.plugins' n'ont pas pu être extraites de référentiel: central en raison d'une erreur: Erreur lors du transfert du fichier: Connexion refusée: connexion
ou
[AVERTISSEMENT] Impossible de récupérer le descripteur de plugin pour org.apache.maven.plugins: maven-clean- plugin: 2.5: Plugin org.apache.maven.plugins: maven-clean-plugin: 2.5 ou l'un de ses les dépendances n'ont pas pu être résolues: échec de la lecture du descripteur d'artefact pour org.apache.maven.plugins: maven-clean-plugin: jar: 2.5
Comment configurer Maven pour utiliser un serveur proxy?
Réponses:
Pour plus de détails sur la configuration d'un proxy pour Maven, consultez le mini guide .
Vous devez essentiellement vous assurer que la section des proxies dans les paramètres globaux (
[maven install]/conf/settings.xml
) ou les paramètres utilisateur (${user.home}/.m2/settings.xml
) est correctement configurée. Il est préférable de le faire dans vos paramètres utilisateur pour éviter de stocker le mot de passe en texte brut dans un endroit public.Maven 2.1 a introduit le cryptage des mots de passe , mais je n'ai pas réussi à vérifier si le cryptage s'applique aux paramètres du proxy ainsi qu'aux mots de passe du référentiel (ne voyez pas pourquoi il ne le serait pas).
Pour plus d'informations, il y a une configuration de proxy commentée dans votre settings.xml et des instructions sur la façon de la modifier.
À partir du mini-guide, vos paramètres devraient ressembler à ceci:
la source
<username>
et<password>
doivent être supprimés (et ne pas recevoir de contenu vide). Cela m'a pris un certain temps à comprendre.Comment utiliser un proxy chaussettes?
Configurez un tunnel SSH vers un serveur quelque part:
Linux (bash):
Les fenêtres:
la source
MAVEN_OPTS
est le seul moyen de faire télécharger Maven via HTTPS. L'utilisation de proxies HTTP ou HTTPS, viaMAVEN_OPTS
ousettings.xml
, aboutit àorg.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec execute INFO: I/O exception (java.net.SocketException) caught when processing request to {tls}->http://proxy.mycompany.com:911->https://repo.maven.apache.org:443: SOCKS: TTL expired
http
procuration:export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=$PORT"
MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080" mvn clean install
Lesmvn
commandes suivantes de la même session seront sans proxy.J'ai également eu ce problème et je l'ai résolu en éditant le
settings.xml
fichier dans mon.m2
dossier. Monsettings.xml
est comme ça maintenant:la source
Notez également que certains plugins (des ressources distantes viennent à l'esprit) utilisent une très ancienne bibliothèque qui n'accepte que la configuration du proxy via MAVEN_OPTS;
Vous pourriez être bloqué sur l'authentification pour celui-ci.
la source
Pour définir le proxy Maven :
Modifiez la session des proxys dans votre fichier ~ / .m2 / settings.xml . Si vous ne trouvez pas le fichier, créez-en un.
ou
Modifiez la session des proxies dans votre {M2_HOME} /conf/settings.xml
J'espère que ça aide.. :)
la source
Ceux-ci sont probablement causés par 2 problèmes:
Si certains d'entre eux sont omis, maven peut échouer avec des messages d'erreur aléatoires.
J'espère juste que j'ai sauvé quelqu'un de googler autour de ce problème pendant 6 heures, comme je l'ai fait.
la source
Juste pour ajouter mes propres expériences avec ceci: le proxy de mon entreprise est
http://webproxy.intra.companyname.com:3128
. Pour que maven fonctionne via ce proxy, les paramètres doivent être exactement comme çaContrairement à certains autres fichiers de configuration de proxy, le
protocol
ici décrit comment se connecter au serveur proxy, pas quels types de protocole doivent être proxy. Lahttp
partie de la cible doit être séparée du nom d'hôte, sinon cela ne fonctionnera pas.la source
Merci @krosenvold.
Si les modifications du fichier de paramètres ne fonctionnent pas, essayez ceci dans l'invite de commande contenant le fichier POM.
Cela m'a aidé immédiatement après un changement de mot de passe.
la source
Je lance
cntlm
localement, configuré avec desNTLMv2
hachages de mot de passe pour m'authentifier avec le proxy d'entreprise et utiliserpour utiliser ce proxy à partir de
maven
. Bien sûr, le proxy que vous utilisez doit prendre en chargecntlm
/NTLMv2
.la source
[Environment]::SetEnvironmentVariable("MAVEN_OPTS", "-DproxyHost=127.0.0.1 -DproxyPort=3128", "Machine")
Et pour ajouter à ce sujet, voici mes expériences ci-dessous ... Vraiment étrange et chronophage, j'ai donc pensé que cela valait la peine d'être ajouté.
J'ai eu un problème similaire en essayant de construire le pont de portlet sur Windows, obtenant les erreurs suivantes:
J'ai essayé quelques trucs en suivant un peu de surf:
J'ai essayé de définir le parent.relativePath comme vide pour que maven ne pense pas que le parent était local. Ceci est conforme à la suggestion sur SO à Hudson build fail: POM parent non résoluble et dans ce forum nabble . Cela n'a eu aucun effet.
J'ai également essayé de m'assurer que le référentiel était explicitement répertorié dans mon settings.xml mais cela n'avait aucun effet non plus.
Je me suis ensuite assuré que mvn était obligé de rechercher le référentiel, plutôt que de se fier à sa propre histoire, comme indiqué dans ce blog de Sarthon . Malheureusement, ce n'était pas non plus le problème.
Dans un certain désespoir, j'ai ensuite revisité mes MAVEN_OPTS pour m'assurer de ne pas tomber sous le coup de mes paramètres de proxy. Celles-ci étaient correctes, mais avec la valeur non citée:
Donc, enfin, j'ai déplacé la configuration du proxy dans mon settings.xml et cela a fonctionné:
Je ne sais vraiment pas pourquoi mon MAVEN_OPTS original ne fonctionnait pas (guillemets?) Alors que la configuration settings.xml fonctionnait. J'aimerais inverser le correctif et vérifier à nouveau chaque étape, mais j'ai perdu trop de temps. Fera rapport au fur et à mesure.
la source
Je sais que ce n'est pas vraiment une réponse à la question, mais cela vaut peut-être la peine de le savoir pour quelqu'un qui recherche ce post. Il est également possible d'installer un proxy de référentiel Maven comme nexus .
Votre maven serait configuré pour contacter le proxy Nexus local, et Nexus récupérerait alors (et mettrait en cache) les artefacts. Il peut être configuré via une interface Web et prend en charge les proxys (http)).
Cela peut être un avantage, en particulier dans le cadre d'une entreprise, car les artefacts sont disponibles localement et peuvent être téléchargés rapidement, et vous n'êtes plus aussi dépendant de la disponibilité des référentiels Maven externes.
Pour renvoyer à la question; avec Nexus, il existe une belle interface graphique pour la configuration du proxy, et cela doit être fait sur un seul endroit, et pas pour chaque développeur.
la source
si vous êtes nouveau dans la configuration du proxy pour Maven Dans mon cas, vérifiez d'abord la météo de votre dossier personnel, il y a un
.m2
dossier et il devrait y avoir un fichier nommésettings.xml
sinon créez-le, collez-le et modifiez-lehost
etport
, si nécessaire, modifiez lenonProxyHosts
Si dans tous les cas cela ne réussit pas, effectuez les modifications à cet emplacement du dossier d'accueil
J'utilise Eclipse comme IDE
J'espère que cela vous aidera !!
Remarque: pour supprimer le proxy, déplacez-vous simplement
settings.xml
ailleursla source
Si maven fonctionne via un proxy mais pas certains des plugins qu'il invoque, essayez
JAVA_TOOL_OPTIONS
également de-Dhttp*.proxy*
définir avec les paramètres.Si vous
JAVA_OPTS
venez de fairela source
Sauf pour les techniques mentionnées ci-dessus, avec un peu d'effort, vous pouvez exécuter maven via un proxy en utilisant la bibliothèque jproxyloader (il y a un exemple sur la page comment faire cela: http://jproxyloader.sourceforge.net/ ). Cela permet de configurer le proxy socks uniquement pour télécharger des artefacts.
Dans la solution mentionnée par duanni (paramètre -DsocksProxyHost), il y a un problème. Si vous avez des tests d'intégration exécutés sur une base de données locale (ou d'autres tests de connexion à l'URL qui ne devraient pas passer par un proxy). Ces tests cesseront de fonctionner car les connexions à la base de données seront également dirigées vers le proxy. Avec l'aide de jProxyLoader, vous pouvez configurer le proxy uniquement pour l'hôte nexus. De plus, si vous le souhaitez, vous pouvez passer des connexions à la base de données via un autre proxy.
la source
Parfois, vous devez ajouter d'autres
<proxy></proxy>
balises et spécifier le https dans les balises de protocole:<protocol>https</protocol>
la source
Les messages ci-dessus ont aidé à résoudre mon problème. En plus de ce qui précède, j'ai dû apporter les modifications suivantes pour que cela fonctionne:
Modification des paramètres réseau JRE de Maven (\ jre \ lib \ net.properties) pour utiliser le paramètre de proxy système.
Paramètres de serveur proxy inclus dans settings.xml. Je n'ai pas fourni de paramètres de nom d'utilisateur et de mot de passe pour utiliser l'authentification NTLM.
la source
Maven fournit une méthode intégrée pour ce faire, via un fichier appelé settings.xml , et cela a été couvert dans d'autres réponses. Cependant, il est courant, en particulier sous Linux, que les outils de ligne de commande utilisent
https_proxy
automatiquement le proxy spécifié par la variable d'environnement .Pour suivre le principe Ne vous répétez pas (qui vise à vous aider à éviter les erreurs), ce serait bien si
mvn
pouvait fonctionner automatiquement avec cela aussi.Voici un script shell qui effectue les conversions nécessaires:
Vous pouvez nommer ceci quelque chose comme
proxied_mvn
et l'exécuter comme:Alternativement, vous pouvez simplement déplacer la configuration de l'environnement dans vos scripts de démarrage.
des pièges
Il y a beaucoup de choses qui peuvent mal tourner lorsque vous essayez de configurer Maven pour accéder à un Nexus via un proxy. Espérons que ce script vous aidera à résoudre certains des problèmes les plus difficiles, mais d'autres restent:
Informations d'identification Nexus disponibles et correctes (uniquement si nécessaire)
Vérifier avec
mvn help:effective-settings
Mise en cache Maven: "la résolution ne sera pas tentée à nouveau"
mvn clean package --update-snapshots
Sortie de mur de texte Maven - vous devez regarder de près la sortie pour vous assurer que les messages d'erreur ne sont pas subtilement différents entre les exécutions
Les anciennes versions de Java peuvent nécessiter
_JAVA_OPTIONS
au lieu deJAVA_TOOL_OPTIONS
.épilogue
Il existe plus d'un type de proxy . En conséquence, il y a plus d'une façon dont cette question a été interprétée - contribuant au grand nombre de réponses disparates ici.
J'ai explicitement abordé le cas d'un serveur proxy Web (HTTP / HTTPS) , utilisé pour accéder à Internet à partir d'un réseau d'entreprise (pour certaines entreprises). Cela peut être notamment distinct d'un proxy SOCKS , qui a également été abordé dans certaines réponses ici.
Oh au fait, puisqu'elle utilise
JAVA_TOOL_OPTIONS
, cette solution peut également être appliquée à l' exécution de vos autres applications Java dans un proxy .Indice de séparation ... Mon exemple ci-dessus utilise
http://localhost:58080
. C'est parce que j'ai configuré la redirection de port de monCLIENT_PROXY=localhost:58080
au proxy réseau réel en utilisant WSL sur mon client d' accès à distance pour exécuter:la source