it-swarm.com.de

Wie verwende ich Maven über einen Proxy?

Ich möchte meine Erfahrungen mit Maven über einen Proxy teilen.

Sie würden höchstwahrscheinlich mit Ausnahmen und Nachrichten konfrontiert werden wie:

 Repository-Metadaten für: 'org.Apache.maven.plugins' konnte nicht von 
 Repository abgerufen werden: zentral aufgrund eines Fehlers: Fehler beim Übertragen der Datei: Verbindung abgelehnt: Verbindung 

oder

 [WARNUNG] Fehler beim Abrufen des Plug-In-Deskriptors für org.Apache.maven.plugins: maven-clean -
 Plugin: 2.5: Plugin org.Apache.maven.plugins: maven-clean-plugin: 2.5 oder eines von seine 
 Abhängigkeiten konnten nicht aufgelöst werden: Fehler beim Lesen des Artefaktdeskriptors für 
 org.Apache.maven.plugins: maven-clean-plugin: jar: 2.5 

So konfigurieren Sie Maven für die Verwendung eines Proxyservers

98
Bogdan

Diese werden höchstwahrscheinlich durch 2 Probleme verursacht:

  1. Sie müssen der Einstellungen.xml eine Proxy-Konfiguration hinzufügen. Hier ist ein Trick in Ihrem Benutzernamenfeld. Stellen Sie sicher, dass es nach Domäne\Benutzername aussieht. Das Festlegen der Domäne und das Setzen dieses exakten Schrägstrichs ist "\" wichtig. Möglicherweise möchten Sie das Tag <! [CDATA []]> verwenden, wenn Ihr Kennwort nicht XML-freundliche Zeichen enthält.
  2. Mir ist aufgefallen, dass Maven 2.2.0 manchmal überhaupt nicht durch 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 sechs Stunden lang vor dem Googeln durch dieses Thema gerettet, genau wie ich.

12
Bogdan

Einzelheiten zum Einrichten eines Proxy für Maven finden Sie in der mini-Anleitung .

Im Wesentlichen müssen Sie sicherstellen, dass der Proxy-Abschnitt in den globalen Einstellungen ([maven install]/conf/settings.xml) oder den Benutzereinstellungen (${user.home}/.m2/settings.xml) korrekt konfiguriert ist. Sie sollten dies in Ihren Benutzereinstellungen tun, um zu vermeiden, dass das Kennwort im Klartext an einem öffentlichen Ort gespeichert wird.

Maven 2.1 hat Passwortverschlüsselung eingeführt, aber ich bin noch nicht dazu gekommen, zu prüfen, ob die Verschlüsselung für die Proxy-Einstellungen sowie für Repository-Passwörter gilt (warum dies nicht der Fall ist).

Zu Ihrer Information gibt es in Ihrer settings.xml eine auskommentierte Proxy-Konfiguration und Anweisungen zum Ändern.

Im Mini-Guide 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>
121
Rich Seller

Wie verwende ich einen Socken-Proxy?

Richten Sie irgendwo einen SSH-Tunnel für einen Server ein:

ssh -D $PORT [email protected]$SERVER

Linux (Bash):

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

Windows:

set MAVEN_OPTS="-DsocksProxyHost=127.0.0.1 -DsocksProxyPort=$PORT"
37
gs1

Ich hatte auch dieses Problem und löste es durch Bearbeiten der Datei settings.xml in meinem .m2-Ordner .

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

Beachten Sie auch, dass einige Plugins (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 einen auf Auth hängen.

16
krosenvold

Maven Proxy einstellen :

Bearbeiten Sie die Proxy-Sitzung 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 Proxy-Sitzung in Ihrer {M2_HOME} /conf/settings.xml  

Ich hoffe es hilft.. :)

12
Sarat Chandra

Um meine eigenen Erfahrungen hinzuzufügen: Mein Stellvertreter ist http://webproxy.intra.companyname.com:3128. Damit maven über diesen Proxy arbeiten kann, 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 beschreibt die protocol hier, wie Sie eine Verbindung zum Proxy-Server herstellen, nicht jedoch, welche Protokollarten als Proxy verwendet werden. Der http-Teil des Ziels muss vom Hostnamen getrennt werden, andernfalls funktioniert es nicht.

12
Andy Jones

Danke @krosenvold.

Wenn die Einstellungsdatei nicht funktioniert, versuchen Sie dies in der Eingabeaufforderung mit der POM-Datei.

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

Das hat mir sofort nach einer Passwortänderung geholfen.

7
user1189363

Und um dieses Thema hinzuzufügen, hier sind meine Erfahrungen unten ... Wirklich seltsam und zeitraubend, also dachte ich, es lohnt sich, es hinzuzufügen.

Ich hatte ein ähnliches Problem beim Versuch, die Portlet-Bridge unter Windows zu erstellen. Dabei wurden folgende Fehler angezeigt:

 Herunterladen: http://repo1.maven.org/maven2/org/Apache/portals/bridges-pom/1.0/bridges-pom-1.0.pom
[DEBUG] Lesen der Auflösungsverfolgungsdatei C:\Documents 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\bridges-pom\1.0\bridges-pom-1.0.pom.lastUpdated 
 [ERROR] Der Build konnte 1 Projekt nicht lesen -> [Help 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: bridges-pom: pom: 1.0 von/nach zentral (http://repo1.maven.org/maven2): Fehler beim Übertragen der Datei: repo1.maven.org und "parent.relativePath" zeigt auf falsches local 
 POM @ Zeile 23, Spalte 11 
...
 [ERROR] Das Projekt org.Apache.portals.bridges: portals-bridges-common: 2.0 (H:\path_to_project\portals-bridges-common-2 .0\pom.xml) hat 1 Fehler 
 [ERROR] Nicht auflösbares übergeordnetes POM: Artefakt konnte nicht übertragen werden. Org.Apache.portals: bridges-pom: pom: 1.0 von/nach zentral (http: // repo1.). maven.org/maven2):
Fehler beim Übertragen der Datei: repo1.maven.org und 'parent.relativePath' zeigt auf falsches lokales POM @ Zeile 23, Spalte 11: Unbekannter Host repo1.maven.org -> [Hilfe 2] 
...
 [ERROR] Weitere Informationen zu Fehlern und möglichen Lösungen finden Sie in den folgenden Artikeln: 
 [ERROR] [Hilfe 1] http: //cwiki.Apache. org/confluence/display/MAVEN/ProjectBuildingException 
 [ERROR] [Hilfe 2] http://cwiki.Apache.org/confluence/display/MAVEN/UnresolvableModelException

Ich habe ein paar Dinge ausprobiert und ein bisschen Surfen verfolgt:

  • Es wurde versucht, parent.relativePath als leer zu definieren, so dass Maven nicht der Meinung war, dass das Elternelement lokal ist. Dies ist gemäß dem Vorschlag auf SO unter Hudson Build Fail: Nicht auflösbares übergeordnetes POM und in diesem nabble-Forum . Dies hatte keine Auswirkungen.

  • Ich habe auch versucht, sicherzustellen, dass das Repository explizit in meiner Einstellungen.xml aufgelistet ist. Dies hatte jedoch auch keine Auswirkungen.

  • Ich stellte dann sicher, dass mvn gezwungen war, das Repository nachzuschlagen, anstatt sich auf seine eigene Geschichte zu verlassen, wie in diesem Blog von Sarthon diskutiert. Leider war dies auch nicht das Problem.

  • In einiger Verzweiflung habe ich dann meine MAVEN_OPTS erneut besucht, um sicherzustellen, dass meine Proxy-Einstellungen nicht beeinträchtigt werden. Diese waren korrekt, wenngleich der Wert nicht angegeben wurde:

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

  • Schließlich habe ich 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 config.settings.xml funktionierte. Ich möchte den Fix umkehren und jeden Schritt noch einmal überprüfen, habe aber zu viel Zeit verschwendet. Werde sich wann und wann melden.

6
wmorrison365

Ich führe cntlm localy aus, konfiguriert mit NTLMv2-Kennwort-Hashes, um mich beim Unternehmens-Proxy zu authentifizieren und zu verwenden 

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

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

4
Peter Hofman

Ich weiß, dass dies nicht wirklich eine Antwort auf die Frage ist, aber für jemanden, der diesen Beitrag durchsucht, ist es vielleicht wert zu wissen. 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 im Cache speichern). Es kann über eine Webschnittstelle konfiguriert werden und unterstützt (http) -Proxy-Server.

Dies kann insbesondere in einer Unternehmensumgebung von Vorteil sein, da Artefakte lokal verfügbar sind und schnell heruntergeladen werden können und Sie nicht mehr von der Verfügbarkeit externer Maven-Repositories abhängig sind.

Um zurück zu der Frage zu gelangen; Mit Nexus gibt es eine schöne GUI für die Proxy-Konfiguration, die nur an einem Ort und nicht für jeden Entwickler ausgeführt werden muss. 

4
extraneon

Wenn maven über den Proxy funktioniert, aber nicht einige der aufgerufenen Plugins, versuchen Sie, Java_TOOL_OPTIONS auch mit den -Dhttp*.proxy*-Einstellungen einzustellen.

Wenn Sie bereits Java_OPTS haben, tun Sie es einfach

export Java_TOOL_OPTIONS=$Java_OPTS
1
auselen

wenn Sie mit der Proxy-Einrichtung für Maven noch nicht vertraut sind In meinem Fall überprüfen Sie zunächst, ob sich in Ihrem Home-Ordner der Ordner .m2 befindet. Wenn dies nicht der Fall ist, sollte sich eine Datei mit dem Namen settings.xml darin befinden. Fügen Sie diese ein und Host und port ändern, dann bei Bedarf nonProxyHosts ändern

Basisordner - C:\Users\{UserName}

<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 nicht gelingt, nehmen Sie die Änderungen an diesem Speicherort des Basisordners vor

/conf/settings.xml

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

1
Akitha_MJ

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

0
Pepe

Die obigen Postings halfen bei der Lösung meines Problems. Darüber hinaus musste ich die folgenden Änderungen vornehmen, damit es funktioniert: 

  • Die JRE-Net-Einstellungen von Maven (\ jre\lib\net.properties) wurden geändert, um die System-Proxy-Einstellung zu verwenden . https.proxyHost = Proxy-DNS https.proxyPort = Proxy-Port

    • Proxyserver-Einstellungen in "settings.xml" enthalten. Ich habe keine Einstellungen für Benutzername und Kennwort angegeben, um die NTLM-Authentifizierung zu verwenden. 
0
siachen345

Mit Ausnahme der oben genannten Techniken können Sie mit etwas Aufwand maven durch den Proxy mithilfe der Jproxyloader-Bibliothek ausführen (auf Seite finden Sie ein Beispiel, wie das geht: http://jproxyloader.sourceforge.net/ ). Dies ermöglicht das Einrichten von Socks-Proxy nur für das Herunterladen von Artefakten.

In der von duanni genannten Lösung (Einstellung -DsocksProxyHost) gibt es ein Problem. Wenn Sie Integrationstests für die lokale Datenbank ausführen (oder andere Tests, die sich mit einer URL verbinden, die nicht über einen Proxy ausgeführt werden sollte). Diese Tests funktionieren nicht mehr, da Verbindungen zur Datenbank auch an den Proxy geleitet werden. Mit Hilfe von jProxyLoader können Sie einen Proxy nur für nexus Host einrichten. Wenn Sie möchten, können Sie außerdem Verbindungen zur Datenbank über einen anderen Proxy übergeben.

0
walkeros