Wie verwende ich Maven über einen Proxy?

130

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?

Bogdan
quelle
(Jedermann) Denken Sie daran, dies in eine tatsächliche Frage umzuformulieren (wie: Wie verwende ich Maven über einen Proxy?)? Sie können dann Ihren Fragenkörper als Antwort veröffentlichen, um mehr mit dem StackOverflow-Format in Einklang zu sein.
Tim
Ich habe es für Sie umformuliert Bogdan, bitte posten Sie Ihren ursprünglichen Inhalt als Antwort, wenn Sie wünschen
Rich Seller
Es sieht so aus, als hätten wir zur gleichen Zeit bearbeitet
Rich Seller

Antworten:

145

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:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                  http://maven.apache.org/xsd/settings-1.0.0.xsd">
[...]
  <proxies>
    <proxy>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.somewhere.com</host>
      <port>8080</port>
      <username>proxyuser</username>
      <password>somepassword</password>
      <nonProxyHosts>www.google.com|*.somewhere.com</nonProxyHosts>
    </proxy>
  </proxies>
[...]
</settings>
Reicher Verkäufer
quelle
Danke, aber dieser Beitrag ist eher ein Tipp für andere als eine Frage. Ich habe dieses Problem bereits gelöst, aber zu viel Zeit mit nicht offensichtlichen Dingen verbracht. Ich habe dies gepostet, damit es für jemanden nützlich sein kann.
Bogdan
7
Die Datei settings.xml kann im Verzeichnis m2 nicht gefunden werden. Irgendeine Idee warum? @ Rich Verkäufer
Ariox66
5
Sie müssen es dort platzieren. Sie finden eine Beispieleinstellung settings.xml in maven_home, dem Speicherort, an dem Sie Maven-Binärdateien entpackt haben.
Ravi
Und wenn der Proxy keine Authentifizierung benötigt, die <username>und <password>müssen Elemente entfernt werden (und nicht leer Inhalt gegeben). Ich brauchte eine Weile, um das herauszufinden.
dmcontador
50

Wie benutze ich einen Socken-Proxy?

Richten Sie irgendwo einen SSH-Tunnel zu einem Server ein:

ssh -D $PORT $USER@$SERVER

Linux (Bash):

export MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"

Windows:

set MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"
gs1
quelle
2
Die Verwendung eines Socken-Proxys MAVEN_OPTSist die einzige Möglichkeit, Maven zum Herunterladen über HTTPS zu bewegen. Die Verwendung von HTTP- oder HTTPS-Proxys durch MAVEN_OPTSoder settings.xmlfü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
Mihai Capotă
Für httpProxy:export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=$PORT"
Omid
Großartig, danke. Wenn Sie diese Optionen nur einmal für einen einzelnen Befehl verwenden möchten, können Sie MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080" mvn clean installFolgendes mvneingeben : Die nächsten Befehle in derselben Sitzung sind ohne Proxy.
Eric Duminil
29

Ich hatte auch dieses Problem und habe es gelöst, indem ich die settings.xmlDatei in meinem .m2Ordner bearbeitet habe . Mein settings.xmlist jetzt so:

<settings>
  <proxies>
    <proxy>
      <id>genproxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxyHost</host>
      <port>3128</port>
      <username>username</username>
      <password>password</password>
    </proxy>
 </proxies>
</settings>
pedrobisp
quelle
1
In meinem Fall werden keine JAR-Dateien heruntergeladen. Ich habe alles versucht
Faizan Mubasher
28

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.

-Dhttp.proxyHost=<host> -Dhttp.proxyPort=<port> -Dhttps.proxyHost=<host> -Dhttps.proxyPort=<port>

Sie könnten für diesen Fall auf auth stecken bleiben.

Krosenvold
quelle
Hat bei Ubuntu 14.04 mit maven 3.0.5 aus dem Ubuntu-Repository nicht funktioniert. Das Konfigurieren des Proxys in der Datei settings.xml hat funktioniert.
Mihai Capotă
1
Arbeitete für mich unter Ubuntu 14.04 mit Maven 3.0.4
rmv
Ein Beispiel für die Notwendigkeit, MAVEN_OPTS auf diese Weise festzulegen, ist das Erstellen von Maven aus der Quelle mit Maven. Ohne MAVEN_OPTS kann LICENSE-2.0 trotz des Herunterladens vieler JARs nicht heruntergeladen werden.
Meerjungfrau
@ Krosenvold danke, diese Lösung hat bei mir funktioniert. Ich hatte den Proxy bereits in settings.xml festgelegt, aber es gab ein cxf-Plugin, das den Code aus wsdl generieren wollte, was fehlschlug. Dies hat mein Problem behoben.
Vishal Vijayan
23

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.

<settings>
<proxies>
    <proxy>
        <id>httpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>your-proxy-host</host>
        <port>your-proxy-port</port>
        <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
<proxy>
        <id>httpsproxy</id>
        <active>true</active>
        <protocol>https</protocol>
        <host>your-proxy-host</host>
        <port>your-proxy-port</port>
        <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>

</proxies>
</settings>

oder

Bearbeiten Sie die Proxysitzung in Ihrer Datei {M2_HOME} /conf/settings.xml

Ich hoffe es hilft.. :)

Sarat Chandra
quelle
15

Diese werden höchstwahrscheinlich durch zwei Probleme verursacht:

  1. Sie müssen Ihrer settings.xml eine Proxy-Konfiguration hinzufügen. Hier ist ein Trick in Ihrem Benutzernamenfeld. Stellen Sie sicher, dass es wie Domain \ Benutzername aussieht. Das Einstellen der Domain dort und das Setzen dieses genauen Schrägstrichs ist wichtig '\'. Möglicherweise möchten Sie das Tag <! [CDATA []]> verwenden, wenn Ihr Kennwort nicht xml-freundliche Zeichen enthält.
  2. Ich habe festgestellt, dass Maven 2.2.0 manchmal überhaupt nicht über einen Proxy funktioniert, wobei 2.2.1 einwandfrei funktioniert.

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.

Bogdan
quelle
Verwenden Sie einen NTLM-Proxy? Aus dem Mini-Handbuch: "Bitte beachten Sie, dass [c] derzeit NTLM-Proxys nicht unterstützt werden, da sie nicht getestet wurden. Möglicherweise können Sie die relevanten Systemeigenschaften in JDK 1.4+ verwenden, damit dies funktioniert."
Rich Seller
Ich bin mir nicht sicher. Das ist ein Corporate Proxy, der tatsächlich 600 Meilen von mir entfernt ist und an diesem Wochenende niemand von der Systemadministration im Amt ist. Also kann ich jetzt niemanden fragen. Es wird interessant sein, es herauszufinden. Ich weiß, dass es http, Socken und andere Protokolle unterstützt. Vielleicht ist es auch NTML.
Bogdan
14

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 sein

<settings>
  <proxies>
    <proxy>
      <id>default</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>webproxy.intra.companyname.com</host>
      <port>3128</port>
    </proxy>
  </proxies>
</settings>

Im Gegensatz zu einigen anderen Proxy-Konfigurationsdateien wird protocolhier beschrieben, wie eine Verbindung zum Proxyserver hergestellt wird und nicht, welche Arten von Protokollen als Proxy verwendet werden sollen. Der httpTeil des Ziels muss vom Hostnamen getrennt werden, sonst funktioniert es nicht.

Andy Jones
quelle
Zu diesem Zeitpunkt habe ich nur das Gegenteil experimentiert. Das Protokoll hier beschreibt, welches Protokoll diesen Proxy verwenden soll. Ich habe gerade erreicht, einen https-Protokoll-Proxy zu konfigurieren, der eine Verbindung zu einem http-Proxy herstellt, indem ich <protocol> https </ protocol>
Olivier Amblet vom
Danke dir! Das hat bei mir funktioniert! Ich hatte "http: //" vorangestellt und es würde fehlschlagen
Jesse McCall
11

Danke @krosenvold.

Wenn die Änderungen an der Einstellungsdatei nicht funktionieren, versuchen Sie dies an der Eingabeaufforderung mit der POM-Datei.

mvn install -Dhttp.proxyHost=abcproxy -Dhttp.proxyPort=8080 -Dhttps.proxyHost=abcproxy -Dhttps.proxyPort=8080

Dies hat mir sofort nach einer Passwortänderung geholfen.

user1189363
quelle
11

Ich cntlmführe localy aus, konfiguriere es mit NTLMv2Passwort-Hashes, um mich beim Corporate Proxy zu authentifizieren, und verwende

export MAVEN_OPTS="-DproxyHost=127.0.0.1 -DproxyPort=3128"

um diesen Proxy von zu verwenden maven. Natürlich sollte der von Ihnen verwendete Proxy cntlm/ unterstützen NTLMv2.

Peter Hofman
quelle
`setze MAVEN_OPTS = -DproxyHost = 127.0.0.1 -DproxyPort = 3128` für Windows
qxo
PowerShell kann eine Systemumgebungsvariable [Environment]::SetEnvironmentVariable("MAVEN_OPTS", "-DproxyHost=127.0.0.1 -DproxyPort=3128", "Machine")
festlegen
6

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:

Herunterladen: http://repo1.maven.org/maven2/org/apache/portals/bridges-pom/1.0/bridges-pom-1.0.pom
[DEBUG] Lesen der Auflösungsverfolgungsdatei C: \ Dokumente und Einstellungen \ myuser \ .m2 \ repository \ org \ apache \ portals \ Bridges-Pom \ 1.0 \ Bridges-Pom-1.0.pom.lastUpdated
[DEBUG] Schreiben der Auflösungsverfolgungsdatei C: \ Dokumente und Einstellungen \ myuser \ .m2 \ repository \ org \ apache \ portals \ bridge-pom \ 1.0 \ bridge-pom-1.0.pom.lastUpdated
[FEHLER] Der Build konnte 1 Projekt nicht lesen -> [Hilfe 1]
org.apache.maven.project.ProjectBuildingException: Bei der Verarbeitung der POMs sind einige Probleme aufgetreten:
[FATAL] Nicht auflösbares übergeordnetes POM: Artefakt konnte nicht übertragen werden
org.apache.portals: bridge-pom: pom: 1.0 von / nach central (http://repo1.maven.org/maven2): Fehler beim Übertragen der Datei: repo1.maven.org und 'parent.relativePath' zeigen auf falsches lokales
POM @ Zeile 23, Spalte 11
...
[FEHLER] Das Projekt org.apache.portals.bridges: portals-bridge-common: 2.0 (H: \ path_to_project \ portals-bridge-common-2.0 \ pom.xml) hat 1 Fehler
[FEHLER] Nicht auflösbares übergeordnetes POM: Artefakt konnte nicht übertragen werden org.apache.portals: bridge-pom: pom: 1.0 von / nach central (http://repo1.maven.org/maven2):
Fehler beim Übertragen der Datei: repo1.maven.org und 'parent.relativePath' zeigen auf falsches lokales POM @ Zeile 23, Spalte 11: Unbekannter Host repo1.maven.org -> [Hilfe 2]
...
[FEHLER] Weitere Informationen zu Fehlern und möglichen Lösungen finden Sie in den folgenden Artikeln:
[FEHLER] [Hilfe 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[FEHLER] [Hilfe 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException

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:

    setze MAVEN_OPTS = -Dhttp.proxyHost = myproxy.mycompany.com -Dhttp.proxyPort = 8080 -Xmx256m

  • Also habe ich endlich die Proxy-Konfiguration in meine settings.xml verschoben und das hat funktioniert:

    <proxies>
      <proxy>
        <id>genproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <!--username>proxyuser</username-->
        <!--password>proxypass</password-->
        <host>myproxy.mycompany.com</host>
        <port>8080</port>
        <nonProxyHosts>*.mycompany.com|127.0.0.1</nonProxyHosts>
      </proxy>
    </proxies>

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.

wmorrison365
quelle
Haben Sie auch in MAVEN_OPTS einen Benutzernamen und ein Passwort angegeben?
bcmoney
1
Ich glaube nicht, aber dann muss ich nicht für meinen Proxyserver. Wie Sie sehen können, ist es möglich. Abgesehen von den Sicherheitsproblemen können Sie es versuchen. Ich nehme an, Sie haben immer noch Probleme, so weit gekommen zu sein?
wmorrison365
4

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.

Extraneon
quelle
3

wenn Sie Proxy - Setup für Maven In meinem Fall sind neu zuerst die Home - Ordner Wetter gehen und überprüfen gibt es .m2Ordner und darin soll es eine Datei mit dem Namen sein , settings.xmlwenn es nicht schaffen, und fügen Sie diese und ändert hostund portdann , wenn nötig Änderung desnonProxyHosts

Home-Ordner - C: \ Benutzer \ {Benutzername}

<settings>
<proxies>
    <proxy>
        <id>httpproxy</id>
        <active>true</active>
        <protocol>http</protocol>
        <host>your-proxy-host</host>
        <port>your-proxy-port</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>
<proxy>
        <id>httpsproxy</id>
        <active>true</active>
        <protocol>https</protocol>
        <host>your-proxy-host</host>
        <port>your-proxy-port</port>
        <nonProxyHosts>localhost</nonProxyHosts>
    </proxy>

</proxies>
</settings>

Wenn dies in jedem Fall nicht erfolgreich ist, nehmen Sie die Änderungen an diesem Speicherort des Basisordners vor

/conf/settings.xml

Ich benutze Eclipse als meine IDE
Hoffe das wird helfen !!

Hinweis: Um den Proxy zu entfernen, gehen Sie einfach settings.xmlzu einem anderen Ort

Akitha_MJ
quelle
Um den Proxy zu entfernen, verschieben Sie einfach settings.xml an einen anderen Ort
Akitha_MJ
1

Wenn Maven über den Proxy funktioniert, aber nicht über einige der Plugins, die es aufruft, versuchen Sie es JAVA_TOOL_OPTIONSauch mit-Dhttp*.proxy* vorzunehmen.

Wenn du es schon JAVA_OPTSgetan hast

export JAVA_TOOL_OPTIONS=$JAVA_OPTS
auselen
quelle
0

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.

Walkeros
quelle
0

Manchmal müssen Sie andere <proxy></proxy>Tags hinzufügen und das https in den Protokoll-Tags angeben:<protocol>https</protocol>

Pepe
quelle
0

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.

    https.proxyHost=proxy DNS
    https.proxyPort=proxy port
  • Proxy-Server-Einstellungen in settings.xml enthalten. Ich habe keine Einstellungen für Benutzername und Kennwort für die Verwendung der NTLM-Authentifizierung angegeben.

siachen345
quelle
0

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

Um dem Prinzip „ Nicht wiederholen“ zu folgen (das Ihnen helfen soll, Fehler zu vermeiden), wäre es schön, wenn Sie auch mvndamit automatisch arbeiten könnten.

Hier ist ein Shell-Skript, das die erforderlichen Konvertierungen vornimmt:

#! /usr/bin/env bash

function javaproxy {
    ## using "Shell Parameter Expansion"
    request_scheme=$1 ; proxy=$2
    notscheme=$(echo ${proxy#*://}) ## parse
    scheme=$(echo ${proxy%${notscheme}}) ## remove
    scheme=$(echo ${scheme%://}) ## strip
    hostport=$(echo ${proxy#*//*}) ## parse
    host=$(echo ${hostport%:*}) ## parse
    port=$(echo ${hostport#${host}}) ## remove
    port=$(echo ${port#:}) ## strip
    scheme=$(echo ${scheme:-http}) ## default
    host=$(echo ${host:-localhost}) ## default
    port=$(echo ${port:-8080}) ## default
    echo -n " -D${request_scheme}.proxyHost=${host}"
    echo -n " -D${request_scheme}.proxyPort=${port}"
}

JTO=""

if [ $http_proxy ] ; then
    JTO="${JTO}$(javaproxy http ${http_proxy})"
fi

if [ $https_proxy ] ; then
    JTO="${JTO}$(javaproxy https ${https_proxy})"
fi

if [ $no_proxy ] ; then
    JTO="${JTO} -Dhttp.nonProxyHosts=$(echo \"${no_proxy}\"|tr ',' '|')"
fi

   export JAVA_TOOL_OPTIONS=${JTO}
   echo "JAVA_TOOL_OPTIONS=${JAVA_TOOL_OPTIONS}"

   mvn_friendliness_options+=--update-snapshots
   mvn ${mvn_friendliness_options} $@

Sie könnten dies so nennen proxied_mvnund ausführen als:

$ https_proxy=http://localhost:58080 ./proxied_mvn clean package

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_OPTIONSanstelle von JAVA_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 meinem CLIENT_PROXY=localhost:58080zum eigentlichen Netzwerkproxy mithilfe der WSL auf meinem RAS- Client eingerichtet habe, um Folgendes auszuführen:

ssh $PROXY_CLIENT -R $CLIENT_PROXY:$SERVER_PROXY
Brent Bradburn
quelle