web-dev-qa-db-fra.com

Comment utiliser Maven via un proxy?

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?

98
Bogdan

Celles-ci sont probablement causées par 2 problèmes:

  1. Vous devez ajouter une configuration de proxy à votre fichier settings.xml. Voici une astuce dans le champ de votre nom d'utilisateur. Assurez-vous qu'il ressemble à domaine\nom d'utilisateur. Définir domaine ici et mettre cette barre oblique est important "\". Vous voudrez peut-être utiliser la balise <! [CDATA []]> si votre mot de passe contient des caractères non compatibles avec xml.
  2. J'ai remarqué que maven 2.2.0 ne fonctionnait parfois pas avec un proxy, où 2.2.1 fonctionnait parfaitement.

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.

12
Bogdan

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>
121
Rich Seller

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"
37
gs1

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>
20
pedrobisp

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.

16
krosenvold

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.. :)

12
Sarat Chandra

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.

12
Andy Jones

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.

7
user1189363

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.

6
wmorrison365

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.

4
Peter Hofman

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. 

4
extraneon

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
1
auselen

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 !!

1
Akitha_MJ

Parfois, vous devez ajouter d'autres balises <proxy></proxy> et spécifier le https dans les balises de protocole: <protocol>https</protocol>

0
Pepe

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

    • Paramètres du serveur proxy inclus dans settings.xml. Je n'ai pas fourni les paramètres de nom d'utilisateur et de mot de passe pour utiliser l'authentification NTLM. 
0
siachen345

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.

0
walkeros