19 votes

Rendre les paramètres du proxy/serveur Maven configurables en fonction de la localisation ?

Je ne suis pas sûr de la meilleure façon d'y parvenir, mais j'ai un ordinateur portable que j'utilise au travail pour les projets Maven. Cela fonctionne bien lorsque je suis au travail, mais dès que je sors de la porte de leur proxy d'entreprise et de leur serveur maven, je dois souvent faire beaucoup de manipulations à la main de l'option settings.xml lorsque je suis chez moi si je ne suis pas connecté par VPN :

  • Nous disposons d'un serveur proxy Maven Repository installé par l'entreprise pour stocker certains de nos propres artefacts et jouer le rôle d'intermédiaire pour les artefacts que nous utilisons couramment.
  • Nous avons un proxy http que nous utilisons pour nous connecter au monde extérieur.

Les deux configurations ont été gérées par mon settings.xml pour définir un un seul groupe Nexus y proxies maven . Si je ne suis pas connecté au VPN lorsque je ne suis pas au bureau, je dois modifier le fichier settings.xml chaque fois que je n'y suis pas, puis le rétablir lorsque j'y suis.

Quelles sont les solutions trouvées par d'autres personnes pour résoudre ce problème ? J'ai essayé des profils pour gérer le proxy, mais je n'arrive pas à le faire fonctionner correctement, et ça commence à être assez moche. Il y a t-il des configurations de paramètres qui peuvent détecter lorsque je ne suis pas derrière le proxy au travail et que je n'utilise pas le serveur proxy de l'entreprise ou le serveur Maven ?

11voto

Pascal Thivent Points 295221

Bien que je puisse penser à une solution basée sur le profil pour gérer le proxy (en gros, lire le fichier <active> à partir d'une propriété définie dans un profil), cela ne serait pas entièrement automatisé (la fonction activation du profil ne supportent pas le réseau) à moins que vous ne puissiez trouver un fichier qui est présent ou non en fonction de votre emplacement (dans ce cas, vous pourriez utiliser un déclencheur de fichier existant/manquant, mais c'est un peu difficile). Quoi qu'il en soit, cela ne résoudrait qu'une partie du problème car les miroirs ne peuvent pas être déclarés dans les profils (voir MNG-3525 ).

Ainsi, au lieu d'essayer de contrôler cela avec un profil, je suggérerais d'utiliser deux settings.xml et de passer votre settings-home.xml avec le fichier -s lorsque vous êtes chez vous.

Une autre option consisterait à automatiser les changements dans votre settings.xml avec un script (Groovy serait un bon choix comme quelqu'un l'a signalé dans MNG-3525 ).

8voto

Stepan Vavra Points 2482

J'ai trouvé un moyen d'utiliser des variables d'environnement pour définir nonProxyHosts avec proxy y noproxy Les alias de shell sont la solution la plus pratique pour passer d'un réseau avec proxy à un réseau sans proxy.

En settings.xml configurer le proxy avec

<host>proxy.corporation.int</host>
<port>8080</port>
<nonProxyHosts>${env.MAVEN_NONPROXY}</nonProxyHosts>

Ensuite, dans ~/.profile fixer

export MAVEN_NONPROXY_PROXY='*.corporation.int|local.net|some.host.com'
export MAVEN_NONPROXY_NOPROXY='*'

alias proxy="export MAVEN_NONPROXY=\"$MAVEN_NONPROXY_PROXY\" && export all_proxy=http://proxy.corporation.int:8080"
alias noproxy="export MAVEN_NONPROXY=\"$MAVEN_NONPROXY_NOPROXY\" && unset all_proxy"

Pour effectuer le changement en itinérance, il suffit de l'exécuter à partir d'un shell :

[me@linuxbox me]$ proxy

o

[me@linuxbox me]$ noproxy

Il est évident que les deux alias proxy y noproxy peut inclure beaucoup plus de changements que la simple configuration de MAVEN_NOPROXY y all_proxy .

3voto

Volkert Points 31

J'ai été frustré par le même problème : devoir éditer manuellement settings.xml lorsque l'on passe d'un réseau à l'autre. A tel point que j'ai écrit un plugin Maven qui permet la découverte automatique des paramètres de proxy. L'implémentation actuelle utilise la bibliothèque proxy-vole écrite par Bernd Rosstauscher pour détecter les paramètres de proxy en fonction de la configuration du système d'exploitation, du navigateur et des paramètres de l'environnement.

Je viens de publier le code source du plugin sur Github, sous licence Apache 2.0 : https://github.com/volkertb/autoproxy-maven-plugin

Nous vous invitons à l'essayer et à voir s'il répond à vos besoins. Tout commentaire ou contribution est le bienvenu !

(Note : vous n'avez pas nécessairement besoin d'ajouter le plugin au POM de votre projet. Vous pouvez également l'invoquer à partir de la ligne de commande, après l'avoir installé. Voir le README sur le site pour plus de détails).

0voto

javabrett Points 151

Vous pouvez définir MAVEN_OPTS lorsque vous devez activer un proxy :

export MAVEN_OPTS="-Dhttp.proxyHost=my-proxy-server -Dhttp.proxyPort=80 -Dhttp.nonProxyHosts=*.my.org -Dhttps.proxyHost=my-proxy-server -Dhttps.proxyPort=80 -Dhttps.nonProxyHosts=*.my.org"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X