Ich möchte meine Erfahrungen mit der Verwendung von Maven über einen Proxy teilen.
Sie würden höchstwahrscheinlich mit Ausnahmen und Meldungen konfrontiert sein wie:
Repository-Metadaten für: 'org.apache.maven.plugins' konnten nicht abgerufen werden Repository: zentral aufgrund eines Fehlers: Fehler beim Übertragen der Datei: Verbindung abgelehnt: Verbindung hergestellt
oder
[WARNUNG] Fehler beim Abrufen des Plugin-Deskriptors für org.apache.maven.plugins: maven-clean- Plugin: 2.5: Plugin org.apache.maven.plugins: Maven-Clean-Plugin: 2.5 oder eines seiner Abhängigkeiten konnten nicht aufgelöst werden: Fehler beim Lesen des Artefaktdeskriptors für org.apache.maven.plugins: maven-clean-plugin: jar: 2.5
Wie konfiguriere ich Maven für die Verwendung eines Proxyservers?
Antworten:
Einzelheiten zum Einrichten eines Proxys für Maven finden Sie in der Kurzanleitung .
Im Wesentlichen müssen Sie sicherstellen, dass der Abschnitt "Proxys" entweder in den globalen Einstellungen (
[maven install]/conf/settings.xml
) oder in den Benutzereinstellungen (${user.home}/.m2/settings.xml
) korrekt konfiguriert ist. Es ist besser, dies in Ihren Benutzereinstellungen zu tun, um zu vermeiden, dass das Kennwort im Klartext an einem öffentlichen Ort gespeichert wird.Maven 2.1 hat die Kennwortverschlüsselung eingeführt , aber ich bin noch nicht dazu gekommen, zu überprüfen, ob die Verschlüsselung sowohl für die Proxy-Einstellungen als auch für die Repository-Kennwörter gilt (ich verstehe nicht, warum dies nicht der Fall ist).
Für Informationen gibt es eine auskommentierte Proxy-Konfiguration in Ihrer settings.xml und Anweisungen zum Ändern.
In der Mini-Anleitung sollten Ihre Einstellungen ungefähr so aussehen:
quelle
<username>
und<password>
müssen Elemente entfernt werden (und nicht leer Inhalt gegeben). Ich brauchte eine Weile, um das herauszufinden.Wie benutze ich einen Socken-Proxy?
Richten Sie irgendwo einen SSH-Tunnel zu einem Server ein:
Linux (Bash):
Windows:
quelle
MAVEN_OPTS
ist die einzige Möglichkeit, Maven zum Herunterladen über HTTPS zu bewegen. Die Verwendung von HTTP- oder HTTPS-Proxys durchMAVEN_OPTS
odersettings.xml
führt zuorg.apache.maven.wagon.providers.http.httpclient.impl.execchain.RetryExec execute INFO: I/O exception (java.net.SocketException) caught when processing request to {tls}->http://proxy.mycompany.com:911->https://repo.maven.apache.org:443: SOCKS: TTL expired
http
Proxy:export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=$PORT"
MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080" mvn clean install
Folgendesmvn
eingeben : Die nächsten Befehle in derselben Sitzung sind ohne Proxy.Ich hatte auch dieses Problem und habe es gelöst, indem ich die
settings.xml
Datei in meinem.m2
Ordner bearbeitet habe . Meinsettings.xml
ist jetzt so:quelle
Beachten Sie auch, dass einige Plugins (ich denke an Remote-Ressourcen) eine wirklich alte Bibliothek verwenden, die nur die Proxy-Konfiguration über MAVEN_OPTS akzeptiert.
Sie könnten für diesen Fall auf auth stecken bleiben.
quelle
So stellen Sie den Maven-Proxy ein :
Bearbeiten Sie die Proxysitzung in Ihrer Datei ~ / .m2 / settings.xml . Wenn Sie die Datei nicht finden können, erstellen Sie eine.
oder
Bearbeiten Sie die Proxysitzung in Ihrer Datei {M2_HOME} /conf/settings.xml
Ich hoffe es hilft.. :)
quelle
Diese werden höchstwahrscheinlich durch zwei Probleme verursacht:
Wenn einige davon weggelassen werden, kann maven mit zufälligen Fehlermeldungen fehlschlagen.
Ich hoffe nur, ich habe jemanden 6 Stunden lang davor bewahrt, dieses Problem zu googeln, so wie ich.
quelle
Nur um meine eigenen Erfahrungen damit hinzuzufügen: Der Proxy meines Unternehmens ist
http://webproxy.intra.companyname.com:3128
. Damit Maven über diesen Proxy funktioniert, müssen die Einstellungen genau so seinIm Gegensatz zu einigen anderen Proxy-Konfigurationsdateien wird
protocol
hier beschrieben, wie eine Verbindung zum Proxyserver hergestellt wird und nicht, welche Arten von Protokollen als Proxy verwendet werden sollen. Derhttp
Teil des Ziels muss vom Hostnamen getrennt werden, sonst funktioniert es nicht.quelle
Danke @krosenvold.
Wenn die Änderungen an der Einstellungsdatei nicht funktionieren, versuchen Sie dies an der Eingabeaufforderung mit der POM-Datei.
Dies hat mir sofort nach einer Passwortänderung geholfen.
quelle
Ich
cntlm
führe localy aus, konfiguriere es mitNTLMv2
Passwort-Hashes, um mich beim Corporate Proxy zu authentifizieren, und verwendeum diesen Proxy von zu verwenden
maven
. Natürlich sollte der von Ihnen verwendete Proxycntlm
/ unterstützenNTLMv2
.quelle
[Environment]::SetEnvironmentVariable("MAVEN_OPTS", "-DproxyHost=127.0.0.1 -DproxyPort=3128", "Machine")
Und um dieses Thema zu ergänzen, hier sind meine Erfahrungen unten ... Wirklich seltsam und zeitaufwändig, also dachte ich, dass es sich lohnt, sie hinzuzufügen.
Ich hatte ein ähnliches Problem beim Versuch, die Portlet-Bridge unter Windows zu erstellen, und bekam die folgenden Fehler:
Nach einigem Surfen habe ich ein paar Dinge ausprobiert:
Es wurde versucht, parent.relativePath als leer festzulegen, damit maven nicht glaubt, dass der Elternteil lokal ist. Dies entspricht dem Vorschlag zu SO bei Hudson Build Fail: Nicht auflösbares übergeordnetes POM und in diesem Nabble-Forum . Dies hatte keine Wirkung.
Ich habe auch versucht sicherzustellen, dass das Repository explizit in meiner settings.xml aufgeführt ist, aber dies hatte auch keine Auswirkungen.
Ich habe dann sichergestellt, dass mvn gezwungen war, das Repository nachzuschlagen, anstatt sich auf seine eigene Geschichte zu verlassen, wie in diesem Blog von Sarthon besprochen . Leider war dies auch nicht das Problem.
In einiger Verzweiflung habe ich dann meine MAVEN_OPTS erneut besucht, um sicherzustellen, dass ich nicht gegen meine Proxy-Einstellungen verstoßen habe. Diese waren korrekt, wenn auch mit dem nicht zitierten Wert:
Also habe ich endlich die Proxy-Konfiguration in meine settings.xml verschoben und das hat funktioniert:
Wirklich nicht sicher, warum mein ursprüngliches MAVEN_OPTS nicht funktionierte (Anführungszeichen?), Während die Konfiguration settings.xml funktionierte. Ich möchte das Update rückgängig machen und jeden Schritt erneut überprüfen, habe aber zu viel Zeit verschwendet. Wird als und wann zurückmelden.
quelle
Ich weiß, dass dies nicht wirklich eine Antwort auf die Frage ist, aber es könnte sich lohnen, es für jemanden zu wissen, der diesen Beitrag sucht. Es ist auch möglich, einen Maven-Repository-Proxy wie nexus zu installieren .
Ihr Maven wäre so konfiguriert, dass er den lokalen Nexus-Proxy kontaktiert, und Nexus würde dann die Artefakte abrufen (und zwischenspeichern). Es kann über eine Webschnittstelle konfiguriert werden und unterstützt (http) Proxys.
Dies kann insbesondere in Unternehmen von Vorteil sein, da Artefakte lokal verfügbar sind und schnell heruntergeladen werden können und Sie nicht mehr so stark von der Verfügbarkeit externer Maven-Repositorys abhängig sind.
Zurück zur Frage verlinken; Mit Nexus gibt es eine nette GUI für die Proxy-Konfiguration, die nur an einer Stelle und nicht für jeden Entwickler ausgeführt werden muss.
quelle
wenn Sie Proxy - Setup für Maven In meinem Fall sind neu zuerst die Home - Ordner Wetter gehen und überprüfen gibt es
.m2
Ordner und darin soll es eine Datei mit dem Namen sein ,settings.xml
wenn es nicht schaffen, und fügen Sie diese und änderthost
undport
dann , wenn nötig Änderung desnonProxyHosts
Wenn dies in jedem Fall nicht erfolgreich ist, nehmen Sie die Änderungen an diesem Speicherort des Basisordners vor
Ich benutze Eclipse als meine IDE
Hoffe das wird helfen !!
Hinweis: Um den Proxy zu entfernen, gehen Sie einfach
settings.xml
zu einem anderen Ortquelle
Wenn Maven über den Proxy funktioniert, aber nicht über einige der Plugins, die es aufruft, versuchen Sie es
JAVA_TOOL_OPTIONS
auch mit-Dhttp*.proxy*
vorzunehmen.Wenn du es schon
JAVA_OPTS
getan hastquelle
Mit Ausnahme der oben genannten Techniken können Sie Maven mit einigem Aufwand mithilfe der jproxyloader-Bibliothek über den Proxy ausführen (auf der Seite finden Sie ein Beispiel hierfür: http://jproxyloader.sourceforge.net/ ). Dies ermöglicht das Einrichten eines Socken-Proxys nur zum Herunterladen von Artefakten.
In der von duanni erwähnten Lösung (Einstellung -DsocksProxyHost) gibt es ein Problem. Wenn Integrationstests für die lokale Datenbank ausgeführt werden (oder andere Tests, die eine Verbindung zur URL herstellen, die nicht über einen Proxy erfolgen soll). Diese Tests funktionieren nicht mehr, da Verbindungen zur Datenbank auch an den Proxy geleitet werden. Mit Hilfe von jProxyLoader können Sie den Proxy nur für den Nexus-Host einrichten. Wenn Sie möchten, können Sie außerdem Verbindungen über einen anderen Proxy an die Datenbank übergeben.
quelle
Manchmal müssen Sie andere
<proxy></proxy>
Tags hinzufügen und das https in den Protokoll-Tags angeben:<protocol>https</protocol>
quelle
Die obigen Beiträge halfen bei der Lösung meines Problems. Zusätzlich zu den oben genannten musste ich die folgenden Änderungen vornehmen, damit es funktioniert:
Die JRE-Netzeinstellungen von Maven (\ jre \ lib \ net.properties) wurden geändert, um die System-Proxy-Einstellung zu verwenden.
Proxy-Server-Einstellungen in settings.xml enthalten. Ich habe keine Einstellungen für Benutzername und Kennwort für die Verwendung der NTLM-Authentifizierung angegeben.
quelle
Maven bietet dazu eine integrierte Methode über eine Datei namens settings.xml , die in anderen Antworten behandelt wurde. Insbesondere unter Linux ist es jedoch üblich, dass Befehlszeilentools automatisch den von der Umgebungsvariablen angegebenen Proxy verwenden
https_proxy
.Um dem Prinzip „ Nicht wiederholen“ zu folgen (das Ihnen helfen soll, Fehler zu vermeiden), wäre es schön, wenn Sie auch
mvn
damit automatisch arbeiten könnten.Hier ist ein Shell-Skript, das die erforderlichen Konvertierungen vornimmt:
Sie könnten dies so nennen
proxied_mvn
und ausführen als:Alternativ können Sie das Umgebungssetup einfach in Ihre Startskripte verschieben.
Fallstricke
Es gibt viele Dinge, die schief gehen können, wenn Sie versuchen, Maven für den Zugriff auf einen Nexus über einen Proxy zu konfigurieren . Hoffentlich hilft dieses Skript bei einigen der schwierigsten Probleme, andere bleiben jedoch:
Nexus-Anmeldeinformationen verfügbar und korrekt (nur bei Bedarf)
Überprüfen Sie mit
mvn help:effective-settings
Maven-Caching: "Die Auflösung wird nicht erneut versucht."
mvn clean package --update-snapshots
Maven-Textwandausgabe - Sie müssen sich die Ausgabe genau ansehen, um sicherzustellen, dass sich Fehlermeldungen zwischen den Läufen nicht geringfügig unterscheiden
Ältere Versionen von Java erfordern möglicherweise
_JAVA_OPTIONS
anstelle vonJAVA_TOOL_OPTIONS
.Epilog
Es gibt mehr als eine Art von Proxy . Dementsprechend gibt es mehr als einen Weg, wie diese Frage interpretiert wurde - was zu der großen Anzahl unterschiedlicher Antworten hier beiträgt.
Ich habe mich explizit mit dem Fall eines Webproxyservers (HTTP / HTTPS) befasst , der für den Zugriff auf das Internet innerhalb eines Unternehmensnetzwerks verwendet wird (für einige Unternehmen). Dies kann sich insbesondere von einem SOCKS-Proxy unterscheiden , auf den hier auch in einigen Antworten eingegangen wurde.
Übrigens, da es verwendet wird
JAVA_TOOL_OPTIONS
, können diese Lösungen auch auf die Ausführung Ihrer anderen Java-Anwendungen in einem Proxy angewendet werden .Abschiedstipp ... Mein Beispiel oben verwendet
http://localhost:58080
. Dies liegt daran, dass ich die Portweiterleitung von meinemCLIENT_PROXY=localhost:58080
zum eigentlichen Netzwerkproxy mithilfe der WSL auf meinem RAS- Client eingerichtet habe, um Folgendes auszuführen:quelle