Je souhaite partager mon expérience d'utilisation de Maven via un proxy.
Vous feriez probablement face à des exceptions et à des messages tels que:
Les métadonnées repository pour: 'org.Apache.maven.plugins' n'ont pas pu être extraites de repository: central en raison d'une erreur: Erreur de transfert de fichier: Connexion refusée: connectez-vous
ou
[AVERTISSEMENT] Impossible d'extraire le descripteur de plugin pour org.Apache.maven.plugins: maven-clean - Plugin: 2.5: Plugin org.Apache.maven.plugins: maven-clean-plugin: 2.5 ses dépendances n'ont pas pu être résolues: échec de lecture du descripteur d'artefact pour org.Apache.maven.plugins: maven-clean-plugin: jar: 2.5
Comment configurer Maven pour utiliser un serveur proxy?
Celles-ci sont probablement causées par 2 problèmes:
Si certains d'entre eux sont omis - maven pourrait échouer avec des messages d'erreur aléatoires.
J'espère juste que j'ai sauvé quelqu'un de googler autour de cette question pendant 6 heures, comme je l'ai fait.
Pour plus de détails sur la configuration d’un proxy pour Maven, voir le mini guide .
Pour l'essentiel, vous devez vous assurer que la section des mandataires dans les paramètres globaux ([maven install]/conf/settings.xml
) ou les paramètres utilisateur (${user.home}/.m2/settings.xml
) est configurée correctement. 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 emplacement public.
Maven 2.1 a introduit le cryptage password , mais je n'ai pas encore vérifié si le cryptage s'appliquait aux paramètres de proxy ainsi qu'aux mots de passe du référentiel (vous ne savez pas pourquoi.
Pour plus d'informations, il existe une configuration de proxy commentée dans votre fichier settings.xml et des instructions pour le modifier.
Dans le mini-guide, vos paramètres devraient ressembler à ceci:
<settings xmlns="http://maven.Apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/SETTINGS/1.0.0
http://maven.Apache.org/xsd/settings-1.0.0.xsd">
[...]
<proxies>
<proxy>
<active>true</active>
<protocol>http</protocol>
<Host>proxy.somewhere.com</Host>
<port>8080</port>
<username>proxyuser</username>
<password>somepassword</password>
<nonProxyHosts>www.google.com|*.somewhere.com</nonProxyHosts>
</proxy>
</proxies>
[...]
</settings>
Comment utiliser un proxy chaussettes?
Configurez un tunnel SSH sur un serveur quelque part:
ssh -D $PORT $USER@$SERVER
Linux (bash):
export MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"
Les fenêtres:
set MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"
J'ai également eu ce problème et je l'ai résolu en modifiant le fichier settings.xml de mon dossier .m2 .
<settings>
<proxies>
<proxy>
<id>genproxy</id>
<active>true</active>
<protocol>http</protocol>
<Host>proxyHost</Host>
<port>3128</port>
<username>username</username>
<password>password</password>
</proxy>
</proxies>
</settings>
Notez également que certains plugins (des ressources distantes viennent à l'esprit) utilisent une très ancienne bibliothèque qui n'accepte que la configuration de proxy via MAVEN_OPTS;
-Dhttp.proxyHost=<Host> -Dhttp.proxyPort=<port> -Dhttps.proxyHost=<Host> -Dhttps.proxyPort=<port>
Vous pourriez être bloqué sur l'auth pour celui-ci.
Pour définir Maven Proxy :
Modifiez la session de proxy dans votre fichier ~/.m2/settings.xml . Si vous ne trouvez pas le fichier, créez-en un.
<settings>
<proxies>
<proxy>
<id>httpproxy</id>
<active>true</active>
<protocol>http</protocol>
<Host>your-proxy-Host</Host>
<port>your-proxy-port</port>
<nonProxyHosts>local.net|some.Host.com</nonProxyHosts>
</proxy>
<proxy>
<id>httpsproxy</id>
<active>true</active>
<protocol>https</protocol>
<Host>your-proxy-Host</Host>
<port>your-proxy-port</port>
<nonProxyHosts>local.net|some.Host.com</nonProxyHosts>
</proxy>
</proxies>
</settings>
ou
Modifiez la session de proxy dans votre {M2_HOME} /conf/settings.xml
J'espère que ça aide.. :)
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 ceci
<settings>
<proxies>
<proxy>
<id>default</id>
<active>true</active>
<protocol>http</protocol>
<Host>webproxy.intra.companyname.com</Host>
<port>3128</port>
</proxy>
</proxies>
</settings>
Contrairement à d'autres fichiers de configuration proxy, la variable protocol
décrit ici la procédure de connexion au serveur proxy, et non le type de protocole à utiliser comme proxy. La partie http
de la cible doit être séparée du nom d’hôte, sinon elle ne fonctionnera pas.
Merci @krosenvold.
Si les modifications du fichier de paramètres ne fonctionnent pas, essayez ceci dans l'invite de commande contenant le fichier POM.
mvn install -Dhttp.proxyHost=abcproxy -Dhttp.proxyPort=8080 -Dhttps.proxyHost=abcproxy -Dhttps.proxyPort=8080
Cela m'a aidé immédiatement après un changement de mot de passe.
Et pour ajouter à ce sujet, voici mes expériences ci-dessous ... Vraiment étrange et prenant beaucoup de temps, 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 portlets sous Windows, en obtenant les erreurs suivantes:
Téléchargement: http://repo1.maven.org/maven2/org/Apache/portals/bridges-pom/1.0/bridges-pom-1.0.pom [DEBUG] Fichier de suivi de la résolution de lecture C:\Documents et Paramètres\myuser\.m2\repository\org\Apache\portals\bridges-pom\1.0\bridges-pom-1.0.pom.lastUpdated [DEBUG] Écriture du fichier de suivi de la résolution C:\Documents and Settings\myuser\.m2\repository\org\Apache\portals\bridges-pom\1.0\bridges-pom-1.0.pom.lastUpdated [. ERREUR] La construction n'a pas pu lire 1 projet -> [Aide 1] org. Apache.maven.project.ProjectBuildingException: des problèmes sont survenus lors du traitement des POM: [FATAL] POM parent non résolvable: impossible de transférer l'artefact Org.Apache.portals: bridges-pom: pom: 1.0 depuis/vers le centre (http://repo1.maven.org/maven2): erreur lors du transfert du fichier: repo1.maven.org et 'parent.relativePath' pointe vers le mauvais local POM @ ligne 23, colonne 11 ... [ERREUR] Le projet org.Apache.portals.bridges: portals-bridges-common: 2.0 (H:\path_to_project\portals-bridges-common-2) .0\pom.xml) a 1 erreur [ERROR] POM parent non résolvable: impossible de transférer l'artefact org.Apache.portals: bridges-pom: pom: 1.0 de/vers central (http: // repo1. maven.org/maven2): Erreur lors du transfert du fichier: repo1.maven.org et 'parent.relativePath' pointe vers le mauvais POM local, ligne 23, colonne 11: hôte inconnu repo1.maven.org -> [Aide 2] ... [ERROR] Pour plus d'informations sur les erreurs et les solutions possibles, veuillez consulter les articles suivants: [ERROR] [Help 1] http: //cwiki.Apache. org/confluence/display/MAVEN/ProjectBuildingException [ERREUR] [Aide 2] http://cwiki.Apache.org/confluence/display/MAVEN/UnresolvableModelException
J'ai essayé plusieurs choses après un peu de surf:
J'ai essayé de définir le parent.relativePath à vide afin que Maven ne pense pas que le parent était local. Ceci est conforme à la suggestion sur SO à Hudson échec de la construction: POM parent non résolvable et dans ce forum simpliste . Cela n'a eu aucun effet.
J'ai également essayé de vérifier que le référentiel était explicitement répertorié dans mon fichier settings.xml, mais cela n'a eu aucun effet non plus.
J'ai ensuite assuré que mvn était obligé de consulter le référentiel, plutôt que de s'appuyer sur sa propre histoire, comme indiqué dans ce blog de Sarthon . Malheureusement, ce n'était pas le problème non plus.
En désespoir de cause, j'ai ensuite revisité mon MAVEN_OPTS pour m'assurer de ne pas tomber en désaccord avec mes paramètres de proxy. Celles-ci étaient correctes, mais avec la valeur non citée:
set MAVEN_OPTS = -Dhttp.proxyHost = myproxy.mycompany.com -Dhttp.proxyPort = 8080 -Xmx256m
Donc, finalement, j'ai déplacé la configuration du proxy dans mon fichier settings.xml et cela a fonctionné:
<proxies>
<proxy>
<id>genproxy</id>
<active>true</active>
<protocol>http</protocol>
<!--username>proxyuser</username-->
<!--password>proxypass</password-->
<Host>myproxy.mycompany.com</Host>
<port>8080</port>
<nonProxyHosts>*.mycompany.com|127.0.0.1</nonProxyHosts>
</proxy>
</proxies>
Vraiment pas bien pourquoi mon MAVEN_OPTS original ne fonctionnait pas (guillemets?) Alors que la configuration settings.xml fonctionnait. Je voudrais inverser le correctif et vérifier chaque étape encore mais avoir perdu trop de temps. Je ferai rapport au fur et à mesure.
J'exécute cntlm
localy, configuré avec des hachages de mot de passe NTLMv2
pour s'authentifier auprès du proxy de l'entreprise, et je l'utilise
export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=3128"
d'utiliser ce proxy de maven
. Bien entendu, le proxy que vous utilisez doit prendre en charge cntlm
/NTLMv2
.
Je sais que ce n'est pas vraiment une réponse à la question, mais il vaut peut-être la peine de le savoir pour quelqu'un qui cherche ce post. Il est également possible d'installer un proxy de référentiel Maven tel que nexus .
Votre maven serait configuré pour contacter le proxy Nexus local, qui récupèrerait (et mettrait en cache) les artefacts. Il peut être configuré via une interface Web et prend en charge les proxy (http).
Cela peut être un avantage, en particulier dans une entreprise, car les artefacts sont disponibles localement et peuvent être téléchargés rapidement, et que vous n'êtes plus dépendant de la disponibilité des référentiels Maven externes.
Pour renvoyer à la question; Avec Nexus, il existe une interface utilisateur graphique Nice pour la configuration du proxy, qui doit être effectuée sur un seul emplacement, et non pour tous les développeurs.
Si maven fonctionne via un proxy, mais pas certains des plug-ins qu'il appelle, essayez de définir également Java_TOOL_OPTIONS
avec les paramètres -Dhttp*.proxy*
.
Si vous avez déjà Java_OPTS
faites juste
export Java_TOOL_OPTIONS=$Java_OPTS
si vous êtes nouveau sur la configuration du proxy pour Maven. Dans mon cas, commencez par vérifier le dossier de votre dossier de départ. Le dossier .m2
contient un fichier nommé settings.xml
s'il n'est pas créé, puis collez-le. et changez Host
et port
, puis si nécessaire changez le nonProxyHosts
Dossier personnel - C:\Utilisateurs\{Nom d'utilisateur}
<settings>
<proxies>
<proxy>
<id>httpproxy</id>
<active>true</active>
<protocol>http</protocol>
<Host>your-proxy-Host</Host>
<port>your-proxy-port</port>
<nonProxyHosts>localhost</nonProxyHosts>
</proxy>
<proxy>
<id>httpsproxy</id>
<active>true</active>
<protocol>https</protocol>
<Host>your-proxy-Host</Host>
<port>your-proxy-port</port>
<nonProxyHosts>localhost</nonProxyHosts>
</proxy>
</proxies>
</settings>
Dans le cas contraire, cela n'aboutira pas et effectuera les modifications à cet emplacement de Home Folder.
/conf/settings.xml
J'utilise Eclipse comme IDE
J'espère que ça va aider !!
Parfois, vous devez ajouter d'autres balises <proxy></proxy>
et spécifier le https dans les balises de protocole: <protocol>https</protocol>
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 les paramètres de proxy système . https.proxyHost = proxy DNS https.proxyPort = port du proxy
Hormis les techniques mentionnées ci-dessus, vous pouvez, avec quelques efforts, exécuter maven via un proxy utilisant la bibliothèque jproxyloader (la page explique comment procéder: http://jproxyloader.sourceforge.net/ ). Cela permet de configurer le proxy socks uniquement pour le téléchargement d'artefacts.
Dans la solution mentionnée par duanni (réglage -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 un autre test de connexion à une URL qui ne devrait pas passer par un proxy). Ces tests cesseront de fonctionner car les connexions à la base de données seront également dirigées vers un proxy. Avec l'aide de jProxyLoader, vous pouvez configurer un 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.