web-dev-qa-db-fra.com

Comment configurer un serveur proxy pour HTTP et HTTPS dans settings.xml de Maven?

J'utilise Maven 3.1.1 derrière un serveur proxy. Le même proxy gère à la fois le trafic HTTP et HTTPS.

Je n'arrive pas à dire à maven utilisant settings.xml d'utiliser les deux protocoles. Il me semble qu’il n’est possible d’avoir qu’un seul proxy actif, quel que soit le proxy défini qui est défini en premier et utilisé; les définitions de proxy "actives" suivantes sont ignorées. C'est mon settings.xml:

<proxies>
    <proxy>
        <id>myhttpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <Host>192.168.1.2</Host>
        <port>3128</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
    <proxy>
        <id>myhttpsproxy</id>
        <active>true</active>
        <protocol>https</protocol>
        <Host>192.168.1.2</Host>
        <port>3128</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
</proxies>

Est-il possible de configurer un proxy pour HTTP et HTTPS dans le settings.xml de maven? Je sais que je pourrais contourner ce problème en transmettant les propriétés du système Java à l'invocation maven, telles que:

-Dhttps.proxyHost=192.168.1.2 -Dhttps.proxyPort=3128

mais cela doit sûrement être possible à partir de settings.xml?

Maven bugs soulevés tels que MNG-2305 et MNG-4394 suggèrent que ce problème est résolu, mais je ne suis pas convaincu.

Sinon, y a-t-il un "proxy proxy" que je pourrais utiliser localement et que je pourrais pointer vers maven? Le "proxy proxy" acheminerait http/https en conséquence. Même dans ce cas, il me faudrait quand même définir deux définitions de proxy actives dans settings.xml pour que Maven puisse diriger les deux types de trafic.

31
Stephen Hartley

Le proxy maven de settings.xml est utilisé à la fois pour http et https. Il vous suffit donc de définir un serveur proxy et il sera utilisé pour les deux. Il vous suffit de ne laisser qu'une balise proxy, comme ceci:

<proxies>
    <proxy>
        <id>myhttpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <Host>192.168.1.2</Host>
        <port>3128</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
</proxies>

Le protocole ci-dessus est le protocole du serveur proxy, pas la requête mandatée.

32
Krzysztof Krasoń

Il fonctionne sans l'entrée supplémentaire ...<id>httpsproxy</id>... (comme l'a mentionné @Krzysztof Krasoń) et avec elle (comme l'a dit le demandeur) ... Eclipse->Maven->User Settings->[x] Update Settings évidemment ne fonctionnait pas du tout et pour tester certaines choses Eclipse->Maven->[x] Download repository index updates on startup doit être vérifié (par exemple Maven Repositories View->Global Repositories->central->Update Index). Et surtout:

Eclipse doit être redémarré après chaque mise à jour settings.xml! : -/

Je suppose que c’est un problème de bogue ou de rechargement/mise en cache .. Nous l’avons testé avec succès 

  • Kepler (4.3) et Néon (4.6) 
  • et leurs versions intégrées Maven (3.2.1/3.3.9) ainsi qu’une version externe 3.3.3
  • avec les URL http:// et https://
2

Mes tests avec Eclipse Maven montrent que la variable protocol dans settings.xml fait référence au protocole du serveur proxy, et non au protocole de la demande URL. Il montre également que Maven utilise uniquement le premier serveur proxy actif répertorié et ignore le reste.

Voici mes preuves:

1. Le documentation indique que

active: true si ce proxy est actif. Ceci est utile pour déclarer un ensemble de mandataires, mais un seul peut être actif à la fois.

protocole, hôte, port: Le protocole: // hôte: port du proxy, séparé en éléments discrets. "

2. Le code source est encore plus clair: 

    /**
     * Get the protocol of the proxy server.
     * @return the protocol of the proxy server
     */
    public String getProtocol()
    {
        return protocol;
    }

3. Tests en situation réelle (utilisant Eclipse Maven):

une. Le 1er proxy est un faux ftp, le 2nd est le vrai http, le 3ème est le vrai https. Résultat: FAIL.

Si le protocole était destiné à la demande d'URL, Maven aurait alors recherché les véritables mandataires http/https et aurait parfaitement fonctionné. Au lieu de cela, il a utilisé le 1er proxy même s'il s'agissait de "ftp" et a échoué.

    <proxies>
        <proxy>
            <id>bogus_ftp</id>
            <active>true</active>
            <protocol>ftp</protocol>
            <port>123</port>
            <Host>bogus.proxy.com</Host>
        </proxy>
        <proxy>
            <id>real_http</id>
            <active>true</active>
            <protocol>http</protocol>
            <port>123</port>
            <Host>real.proxy.com</Host>
        </proxy>
        <proxy>
            <id>real_https</id>
            <active>true</active>
            <protocol>https</protocol>
            <port>123</port>
            <Host>real.proxy.com</Host>
        </proxy>
    </proxies>

b. Le premier proxy est un vrai http, le second est un faux https. Résultat: SUCCESS.

Cela montre qu'il n'a utilisé que le 1er proxy. Sinon, il aurait utilisé le deuxième proxy pour les requêtes https, frappé le faux serveur proxy et échoué.

    <proxies>
        <proxy>
            <id>real_http</id>
            <active>true</active>
            <protocol>http</protocol>
            <port>123</port>
            <Host>real.proxy.com</Host>
        </proxy>
        <proxy>
            <id>bogus_https</id>
            <active>true</active>
            <protocol>https</protocol>
            <port>123</port>
            <Host>bogus.proxy.com</Host>
        </proxy>
    </proxies>

c. Les deux sont http, mais le premier proxy est faux, le second est réel. Résultat: FAIL.

Cela montre que maven n'utilise pas plusieurs mandataires, même pour le même protocole. Sinon, il aurait essayé le 2e proxy réel et réussi.

    <proxies>
        <proxy>
            <id>bogus_http</id>
            <active>true</active>
            <protocol>http</protocol>
            <port>123</port>
            <Host>bogus.proxy.com</Host>
        </proxy>
        <proxy>
            <id>real_http</id>
            <active>true</active>
            <protocol>http</protocol>
            <port>123</port>
            <Host>real.proxy.com</Host>
        </proxy>
    </proxies>
1
wisbucky

J'ai résolu le problème de la mise à jour de la version maven ou, en d'autres termes, de l'utilisation de la version intégrée d'Eclipse maven, mais de la version externe 3.3.9.

0
AnselmM