Verwenden von Maven hinter einem Proxy

1. Einleitung

In diesem Tutorial konfigurieren wir Maven so, dass es hinter einem Proxy arbeitet - eine häufige Situation in Umgebungen, in denen wir keine direkte Verbindung zum Internet herstellen.

In unserem Beispiel wird unser Proxy auf dem Computer 'proxy.baeldung.com' ausgeführt und wartet auf Proxy-Anforderungen über HTTP an Port '80'. Wir werden auch einige interne Websites unter internal.baeldung.com verwenden, auf denen wir keinen Proxy durchlaufen müssen.

2. Proxy-Konfiguration

Erstens, lassen Sie uns Einrichtung einer grundlegenden Proxy - Konfiguration ohne Berechtigungsnachweise .

Lassen Sie uns unsere Maven settings.xml bearbeiten , die sich normalerweise in unserem Verzeichnis '/.m2' befindet . Wenn es dort noch keine gibt, können wir sie aus den globalen Einstellungen im Verzeichnis ' / conf' kopieren .

Und jetzt erstellen wir eine Eintrag in der Sektion:

  proxy.baeldung.com 80  

Da wir auch eine lokale Site verwenden, die den Proxy nicht durchlaufen muss, geben wir sie in an mit einem '|' getrennte Liste mit unserem localhost:

internal.baeldung.com|localhost|127.*|[::1] 

3. Anmeldeinformationen hinzufügen

Wenn unser Proxy nicht gesichert wäre, wäre das alles, was wir brauchen würden. Unsere ist es jedoch. Fügen wir also unsere Anmeldeinformationen zur Proxy-Definition hinzu :

baeldung changeme 

Wir fügen keine Benutzernamen- / Kennworteinträge hinzu, wenn wir sie nicht benötigen - auch keine leeren -, da die Anwesenheit unserer Einträge, wenn der Proxy sie nicht möchte, dazu führen kann, dass unsere Anforderungen abgelehnt werden.

Unsere minimale authentifizierte Konfiguration sollte nun folgendermaßen aussehen:

  proxy.baeldung.com 80 baeldung changeme internal.baeldung.com|localhost|127.*|[::1]  

Wenn wir jetzt den Befehl mvn ausführen, gehen wir über den Proxy, um eine Verbindung zu den Sites herzustellen , nach denen wir suchen .

3.1. Optionale Einträge

Geben Sie ihm die optionale ID 'BaeldungProxy_Authenticated', um die Referenzierung zu vereinfachen, falls wir jemals den Proxy wechseln müssen:

BaeldungProxy_Authenticated

Wenn wir jetzt einen anderen Proxy haben, können wir eine weitere Proxy-Definition hinzufügen, aber nur einer kann aktiv sein. Standardmäßig verwendet Maven die erste aktive Proxy-Definition, die gefunden wird .

Proxy-Definitionen sind standardmäßig aktiv und erhalten die implizite Definition:

true

Wenn wir einen anderen Proxy zum aktiven Proxy machen möchten, deaktivieren wir unseren ursprünglichen Eintrag durch Festlegen zu falsch:

false

Mavens Standardwert für das Proxy-Protokoll ist HTTP , was für die meisten Fälle geeignet ist. Wenn unser Proxy ein anderes Protokoll verwendet, deklarieren wir es hier und ersetzen http durch das Protokoll, das unser Proxy benötigt:

http

Beachten Sie, dass dies das Protokoll ist, das der Proxy verwendet - das Protokoll unserer Anforderungen (ftp: //, //, //) ist davon unabhängig.

Und so sieht unsere erweiterte Proxy-Definition aus , einschließlich der optionalen Elemente:

  BaeldungProxy_Authenticated true http proxy.baeldung.com 80 baeldung changeme internal.baeldung.com|localhost|127.*|[::1]  

Das ist es also für unseren grundlegenden Proxy-Eintrag, aber ist es sicher genug für uns?

4. Sichern unserer Konfiguration

Angenommen, einer unserer Kollegen möchte, dass wir ihm unsere Proxy-Konfiguration senden.

Wir sind nicht besonders daran interessiert, unser Passwort im Klartext zu senden. Lassen Sie uns also sehen, wie einfach es Maven macht, unsere Passwörter zu verschlüsseln .

4.1. Erstellen eines Master-Passworts

Wählen wir zunächst ein Hauptkennwort und sagen "te! St! Ma $ ter".

Verschlüsseln wir nun unser Hauptkennwort , indem wir es bei der Ausführung an der Eingabeaufforderung eingeben :

mvn --encrypt-master-password Master Password: 

Nachdem wir die Eingabetaste gedrückt haben, sehen wir unser verschlüsseltes Passwort in geschweiften Klammern:

{QFMlh/6WjF8H9po9UDo0Nv18e527jqWb6mUgIB798n4=}

4.2. Fehlerbehebung bei der Kennwortgenerierung

Wenn anstelle der Eingabeaufforderung Master Password: {} angezeigt wird (dies kann bei Verwendung von bash passieren), müssen Sie das Kennwort in der Befehlszeile angeben.

Lassen Sie uns das Passwort in Anführungszeichen setzen, um sicherzustellen, dass Sonderzeichen wie '!' habe keine unerwünschten Effekte.

Verwenden wir also einfache Anführungszeichen, wenn wir bash verwenden:

mvn --encrypt-master-password 'te!st!ma$ter'

Oder verwenden Sie doppelte Anführungszeichen, wenn Sie eine Windows-Eingabeaufforderung verwenden:

mvn --encrypt-master-password "te!st!ma$ter"

Nun, manchmal unser erzeugen Master - Passwort enthält geschweiften Klammern , wie in diesem Beispiel mit einer schließenden geschweiften Klammer, ‚}‘ nach dem ‚UD‘:

{QFMlh/6WjF8H9po9UD}0Nv18e527jqWb6mUgIB798n4=}

In diesem Fall können wir entweder:

  • Führen Sie den Befehl mvn –encrypt-master-password erneut aus, um einen weiteren zu generieren (hoffentlich ohne geschweifte Klammer).
  • Entfliehen Sie den geschweiften Klammern in unserem Passwort, indem Sie einen Backslash vor dem '{' oder ' }' einfügen.

4.3. Erstellen einer Datei settings-security.xml

Lassen Sie uns nun unser verschlüsseltes Passwort mit einem maskierten '\}' in eine Datei namens settings-security.xml in unserem .m2- Verzeichnis einfügen :

 {QFMlh/6WjF8H9po9UD\}0Nv18e527jqWb6mUgIB798n4=} 

Zuletzt können wir mit Maven einen Kommentar innerhalb des Master-Elements hinzufügen.

Fügen wir vor dem Kennworttrennzeichen '{' einen Text hinzu und achten Sie darauf, in unserem Kommentar kein {oder} zu verwenden, da Maven sie verwendet, um unser Kennwort zu finden:

We escaped the curly brace with '\' {QFMlh/6WjF8H9po9UD\}0Nv18e527jqWb6mUgIB798n4=}

4.4. Verwenden eines austauschbaren Laufwerks

Angenommen, wir müssen besonders sicher sein und unser Hauptkennwort auf einem separaten Gerät speichern .

Zuerst legen wir unsere Datei settings-security.xml in einem Konfigurationsverzeichnis auf einem Wechseldatenträger ab, "R:":

R:\config\settings-security.xml

Und jetzt aktualisieren wir die Datei settings-security.xml in unserem .m2- Verzeichnis, um Maven auf unserem Wechseldatenträger zu unserer echten settings-security.xml umzuleiten :

   R:\config\settings-security.xml 

Maven wird nun unser verschlüsseltes Master - Passwort aus der Datei , die wir in dem angegebenen lesen Verlagerung Elemente , auf unserem Wechsellaufwerk.

5. Verschlüsseln von Proxy-Passwörtern

Jetzt haben wir ein Master-Passwort verschlüsselt, wir können unser Proxy-Passwort verschlüsseln .

Führen Sie den folgenden Befehl aus und geben Sie an der Eingabeaufforderung unser Kennwort " changeme" ein :

mvn --encrypt-password Password:

Unser verschlüsseltes Passwort wird angezeigt:

{U2iMf+7aJXQHRquuQq6MX+n7GOeh97zB9/4e7kkEQYs=}

Unser letzter Schritt besteht darin , den Proxy-Abschnitt in unserer Datei settings.xml zu bearbeiten und unser verschlüsseltes Passwort einzugeben :

  BaeldungProxy_Encrypted proxy.baeldung.com 80 baeldung {U2iMf+7aJXQHRquuQq6MX+n7GOeh97zB9/4e7kkEQYs=}  

Speichern Sie dies, und Maven sollte nun in der Lage sein, über unseren Proxy mit unseren verschlüsselten Passwörtern eine Verbindung zum Internet herzustellen.

6. Verwenden der Systemeigenschaften

Obwohl die Konfiguration von Maven über die Einstellungsdatei empfohlen wird , können wir unsere Proxy-Konfiguration über die Java-Systemeigenschaften deklarieren.

Wenn für unser Betriebssystem bereits ein Proxy konfiguriert ist, können wir Folgendes festlegen:

-Djava.net.useSystemProxies=true

Alternativ, damit es immer aktiviert ist, können wir dies in unserer Datei /lib/net.properties festlegen , wenn wir über Administratorrechte verfügen .

Beachten Sie jedoch, dass Maven selbst diese Einstellung zwar respektiert, jedoch nicht alle Plugins, sodass mit dieser Methode möglicherweise immer noch fehlgeschlagene Verbindungen auftreten.

Selbst wenn sie aktiviert ist , können wir es überschreiben , indem unsere HTTP - Proxy - Details über die Einstellung http.proxyHost Systemeigenschaft :

-Dhttp.proxyHost=proxy.baeldung.com

Unser Proxy überwacht den Standardport 80, aber wenn er Port 8080 überwacht , konfigurieren wir die Eigenschaft http.proxyPort :

-Dhttp.proxyPort=8080

Und für unsere Websites, die keinen Proxy benötigen :

-Dhttp.nonLocalHosts="internal.baeldung.com|localhost|127.*|[::1]"

Wenn unser Proxy also am 10.10.0.100 ist, können wir Folgendes verwenden:

mvn compile -Dhttp.proxyHost=10.10.0.100 -Dhttp.proxyPort=8080 -Dhttp.nonProxyHosts=localhost|127.0.0.1

Wenn unser Proxy eine Authentifizierung erfordert , fügen wir natürlich Folgendes hinzu :

-Dhttp.proxyUser=baeldung -Dhttp.proxyPassword=changeme

Wenn einige dieser Einstellungen auf alle unsere Maven-Aufrufe angewendet werden sollen, können wir sie in der Umgebungsvariablen MAVEN_OPTS definieren:

set MAVEN_OPTS= -Dhttp.proxyHost=10.10.0.100 -Dhttp.proxyPort=8080

Wenn wir jetzt ' mvn ' ausführen, werden diese Einstellungen automatisch angewendet - bis wir beenden.

7. Fazit

In diesem Artikel haben wir einen Maven-Proxy mit und ohne Anmeldeinformationen konfiguriert und unser Kennwort verschlüsselt. Wir haben gesehen, wie unser Hauptkennwort auf einem externen Laufwerk gespeichert wird, und haben auch die Konfiguration des Proxys mithilfe von Systemeigenschaften untersucht.

Jetzt können wir unsere Datei settings.xml mit unseren Kollegen teilen, ohne ihnen unsere Passwörter im Klartext zu geben, und ihnen zeigen, wie sie ihre verschlüsseln können!

Wie üblich sind die Beispiele in diesem Artikel auf GitHub verfügbar.