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.
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.
Funktioniert ohne das zusätzliche ...<id>httpsproxy</id>...
-Eintrag (wie @Krzysztof Krasoń genannt) und damit (wie der Fragesteller festgestellt hat) .. _ funktionierte offensichtlich überhaupt nicht und um bestimmte Dinge zu testen, muss Eclipse->Maven->User Settings->[x] Update Settings
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
http://
und https://
URLsMeine 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>
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.