wake-up-neo.com

Wie konfiguriere ich einen Proxy-Server für HTTP und HTTPS in Maven settings.xml?

Ich verwende Maven 3.1.1 hinter einem Proxyserver. Der gleiche Proxy behandelt sowohl HTTP als auch HTTPS Verkehr.

Ich kann maven scheinbar nicht mit settings.xml die Verwendung beider Protokolle mitteilen. Es scheint mir, dass es nur einen aktiven Proxy geben kann, da der zuerst definierte aktive Proxy verwendet wird und nachfolgende 'aktive' Proxy-Definitionen ignoriert werden. Dies ist mein 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>

Ist es möglich, einen Proxy für HTTP und HTTPS in maven's settings.xml zu konfigurieren? Ich bin mir bewusst, dass ich dies umgehen kann, indem ich Java-Systemeigenschaften an den Maven-Aufruf übergeben würde, z.

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

aber sicher muss dies von settings.xml aus möglich sein?

Maven-Fehler wie MNG-2305 und MNG-4394 weisen darauf hin, dass dieses Problem gelöst ist, aber ich bin nicht überzeugt.

Gibt es alternativ einen "Proxy-Proxy", den ich lokal ausführen könnte, auf den ich Maven zeigen könnte? Der "Proxy-Proxy" würde http/https entsprechend routen. Trotzdem würde ich immer noch zwei aktive Proxy-Definitionen in settings.xml definieren müssen, damit Maven beide Arten von Datenverkehr lenken kann.

31
Stephen Hartley

Der Maven-Proxy aus der Datei settings.xml wird sowohl für http als auch für https verwendet. Sie müssen also nur einen Proxy-Server definieren. Er wird für beide verwendet. Sie müssen nur ein proxy -Tag wie das folgende lassen:

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

Das obige Protokoll ist das Protokoll des Proxyservers, nicht die übermittelte Anforderung.

32

Funktioniert ohne das zusätzliche ...<id>httpsproxy</id>...-Eintrag (wie @Krzysztof Krasoń genannt) und damit (wie der Fragesteller festgestellt hat) .. _ Eclipse->Maven->User Settings->[x] Update Settings funktionierte offensichtlich überhaupt nicht und um bestimmte Dinge zu testen, muss Eclipse->Maven->[x] Download repository index updates on startup geprüft werden (z. B. Maven Repositories View->Global Repositories->central->Update Index). Und vorallem:

Eclipse muss nach jedem settings.xml-Update neu gestartet werden!: - /

Ich denke, es ist ein Fehler oder ein Reload-/Caching-Problem ... Wir haben es erfolgreich getestet 

  • Kepler (4.3) und Neon (4.6) 
  • und ihre eingebetteten Maven-Versionen (3.2.1/3.3.9) sowie eine externe 3.3.3
  • mit http:// und https:// URLs
2

Meine Tests mit Eclipse Maven zeigen, dass die protocol in settings.xml sich auf das Protokoll des Proxy-Servers bezieht, nicht auf das Protokoll der URL-Anforderung. Es zeigt auch, dass Maven nur den ersten aufgelisteten aktiven Proxy-Server verwendet und den Rest ignoriert.

Hier ist mein Beweis:

1. Die Dokumentation besagt, dass

active: true, wenn dieser Proxy aktiv ist. Dies ist nützlich, um einen Satz von Proxys zu deklarieren. Es kann jedoch jeweils nur einer aktiv sein.

protocol, Host, Port: Das protocol: // Host: Port des Proxy, getrennt in diskrete Elemente. "

2. Der Quellcode ist noch klarer: 

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

3. Tests in der realen Welt (mit Eclipse Maven):

ein. Der erste Proxy ist ein falscher FTP-Server, der zweite ist ein echter http, der dritte ist ein echter https. Ergebnis: FAIL.

Wenn das Protokoll für die URL-Anforderung wäre, hätte Maven die echten http/https-Proxys gesucht und funktioniert einwandfrei. Stattdessen wurde der 1. Proxy verwendet, obwohl er "ftp" war und fehlgeschlagen ist.

    <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. Der erste Proxy ist echtes http, der zweite ist falsches https. Ergebnis: Erfolg.

Dies zeigt, dass nur der 1. Proxy verwendet wurde. Andernfalls hätte es den 2. Proxy für https-Anforderungen verwendet, den falschen Proxy-Server getroffen und wäre fehlgeschlagen.

    <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. Beide sind http, aber der erste Proxy ist falsch, der zweite ist echt. Ergebnis: FAIL.

Dies zeigt, dass Maven selbst für dasselbe Protokoll nicht mehrere Proxys verwendet. Andernfalls hätte es den 2. echten Proxy versucht und es war erfolgreich.

    <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

Ich habe das Problem mit der Aktualisierung der Maven-Version behoben, dh die eingebettete Eclipse-Maven-Version wurde nicht verwendet, sondern die externe Version 3.3.9.

0
AnselmM