Utilizzo di Maven dietro un proxy

1. Introduzione

In questo tutorial, configureremo Maven per lavorare dietro un proxy , una situazione comune negli ambienti in cui non ci colleghiamo direttamente a Internet.

Nel nostro esempio, il nostro proxy è in esecuzione sulla macchina "proxy.baeldung.com" e ascolta le richieste proxy tramite HTTP sulla porta "80". Useremo anche alcuni siti interni su internal.baeldung.com dove non abbiamo bisogno di passare attraverso un proxy.

2. Configurazione proxy

Per prima cosa, impostiamo una configurazione proxy di base senza credenziali .

Modifichiamo il nostro Maven settings.xml che di solito si trova nella nostra directory '/.m2' . Se non ce n'è ancora uno, possiamo copiarlo dalle impostazioni globali nella directory ' / conf' .

E ora creiamo un file ingresso all'interno del sezione:

  proxy.baeldung.com 80  

Dato che utilizziamo anche un sito locale che non necessita di passare attraverso il proxy, specifichiamolo in utilizzando un '|' elenco separato con il nostro localhost:

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

3. Aggiunta di credenziali

Se il nostro proxy non fosse protetto, è tutto ciò di cui avremmo bisogno; tuttavia, la nostra è, quindi aggiungiamo le nostre credenziali alla definizione del proxy :

baeldung changeme 

Non aggiungiamo voci nome utente / password se non ne abbiamo bisogno, anche vuote, poiché averle presenti quando il proxy non le vuole può causare il rifiuto delle nostre richieste.

La nostra configurazione minima autenticata dovrebbe ora assomigliare a questa:

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

Ora, quando eseguiamo il comando mvn , passeremo attraverso il proxy per connetterci ai siti che stiamo cercando .

3.1. Voci opzionali

Diamo l' ID opzionale di "BaeldungProxy_Authenticated" per semplificare il riferimento, nel caso in cui dovessimo cambiare proxy:

BaeldungProxy_Authenticated

Ora, se abbiamo un altro proxy, possiamo aggiungere un'altra definizione di proxy, ma solo uno può essere attivo. Per impostazione predefinita, Maven utilizzerà la prima definizione di proxy attivo che trova .

Le definizioni proxy sono attive per impostazione predefinita e ottengono la definizione implicita:

true

Se volessimo rendere attivo un altro proxy, disattiveremo la nostra voce originale impostando a falso:

false

Il valore predefinito di Maven per il protocollo del proxy è HTTP , adatto per la maggior parte dei casi. Se il nostro proxy utilizza un protocollo diverso, lo dichiareremo qui e sostituiremo http con il protocollo di cui ha bisogno il nostro proxy:

http

Notare che questo è il protocollo utilizzato dal proxy: il protocollo delle nostre richieste (ftp: //, //, //) è indipendente da questo.

Ed ecco come appare la nostra definizione di proxy espansa , inclusi gli elementi opzionali:

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

Quindi, è tutto per la nostra voce proxy di base, ma è abbastanza sicuro per noi?

4. Protezione della nostra configurazione

Ora, diciamo che uno dei nostri colleghi vuole che gli inviamo la nostra configurazione proxy.

Non ci interessa inviare la nostra password in testo normale, quindi vediamo come Maven rende facile crittografare le nostre password .

4.1. Creazione di una password principale

Per prima cosa, scegliamo una password principale, ad esempio "te! St! Ma $ ter".

Ora crittografiamo la nostra password principale , inserendola al prompt quando eseguiamo:

mvn --encrypt-master-password Master Password: 

Dopo aver premuto Invio, vediamo la nostra password crittografata racchiusa tra parentesi graffe:

{QFMlh/6WjF8H9po9UDo0Nv18e527jqWb6mUgIB798n4=}

4.2. Risoluzione dei problemi relativi alla generazione di password

Se vediamo {} invece del prompt Master Password: (questo può accadere quando si usa bash), allora dovremo specificare la password sulla riga di comando.

Mettiamo la password tra virgolette per assicurarci che eventuali caratteri speciali come "!" non hanno effetti indesiderati.

Quindi, usiamo virgolette singole se stiamo usando bash:

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

Oppure usa le virgolette se utilizzi un prompt dei comandi di Windows:

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

Ora, a volte la nostra password principale generata contiene parentesi graffe , come questo esempio con una parentesi graffa di chiusura, "}", dopo "UD":

{QFMlh/6WjF8H9po9UD}0Nv18e527jqWb6mUgIB798n4=}

In questo caso, possiamo:

  • eseguire nuovamente il comando mvn –encrypt-master-password per generarne un altro (si spera senza parentesi graffa)
  • sfuggire alle parentesi graffe nella nostra password aggiungendo una barra rovesciata davanti a "{" o " }"

4.3. Creazione di un impostazioni-security.xml File

Ora mettiamo la nostra password crittografata, con un carattere di escape "\}", in un file chiamato file settings-security.xml nella nostra directory .m2 :

 {QFMlh/6WjF8H9po9UD\}0Nv18e527jqWb6mUgIB798n4=} 

Infine, Maven ci consente di aggiungere un commento all'interno dell'elemento master.

Aggiungiamo del testo prima del delimitatore della password "{", facendo attenzione a non utilizzare un {o} nel nostro commento poiché Maven li usa per trovare la nostra password:

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

4.4. Utilizzo di un'unità rimovibile

Diciamo che dobbiamo essere più sicuri e vogliamo memorizzare la nostra password principale su un dispositivo separato .

Innanzitutto, inseriremo il nostro file settings-security.xml in una directory di configurazione su un'unità rimovibile, "R:":

R:\config\settings-security.xml

E ora, aggiorneremo il file settings-security.xml nella nostra directory .m2 per reindirizzare Maven al nostro vero settings-security.xml sulla nostra unità rimovibile:

   R:\config\settings-security.xml 

Maven ora di leggere la nostra master password crittografata dal file abbiamo specificato nella delocalizzazione elemento , sul nostro disco rimovibile.

5. Crittografia delle password proxy

Ora abbiamo una password principale crittografata, possiamo crittografare la nostra password proxy .

Eseguiamo il seguente comando e immettiamo la nostra password, " changeme", al prompt:

mvn --encrypt-password Password:

Viene visualizzata la nostra password crittografata:

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

Il nostro passaggio finale è modificare la sezione proxy nel nostro file settings.xml e inserire la nostra password crittografata :

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

Salva questo e Maven dovrebbe ora essere in grado di connettersi a Internet tramite il nostro proxy, utilizzando le nostre password crittografate.

6. Utilizzo delle proprietà di sistema

Sebbene la configurazione di Maven tramite il file delle impostazioni sia l'approccio consigliato , potremmo dichiarare la nostra configurazione proxy tramite le proprietà del sistema Java.

Se il nostro sistema operativo ha già un proxy configurato, potremmo impostare:

-Djava.net.useSystemProxies=true

In alternativa, in modo che sia sempre abilitato, se abbiamo i diritti di amministratore possiamo impostarlo nel nostro file /lib/net.properties .

Tuttavia, notiamo che sebbene Maven stesso possa rispettare questa impostazione, non tutti i plugin lo fanno, quindi potremmo comunque ottenere connessioni non riuscite usando questo metodo.

Anche se abilitato, possiamo sovrascriverlo impostando i dettagli del nostro proxy HTTP sulla proprietà di sistema http.proxyHost :

-Dhttp.proxyHost=proxy.baeldung.com

Il nostro proxy è in ascolto sulla porta predefinita 80, ma se fosse in ascolto sulla porta 8080, configureremmo la proprietà http.proxyPort :

-Dhttp.proxyPort=8080

E per i nostri siti che non necessitano del proxy :

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

Quindi, se il nostro proxy è a 10.10.0.100, possiamo usare:

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

Ovviamente, se il nostro proxy richiede l'autenticazione , aggiungeremo anche :

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

E se volessimo applicare alcune di queste impostazioni a tutte le nostre invocazioni Maven, possiamo definirle nella variabile d'ambiente MAVEN_OPTS:

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

Ora, ogni volta che eseguiamo ' mvn ', queste impostazioni verranno applicate automaticamente, finché non usciremo .

7. Conclusione

In questo articolo, abbiamo configurato un proxy Maven con e senza credenziali e abbiamo crittografato la nostra password. Abbiamo visto come memorizzare la nostra password principale su un'unità esterna e abbiamo anche esaminato la configurazione del proxy utilizzando le proprietà di sistema.

Ora possiamo condividere il nostro file settings.xml con i nostri colleghi senza fornire loro le nostre password in testo normale e mostrare loro come crittografare le loro!

Come al solito, gli esempi in questo articolo sono disponibili su GitHub.