Come usare sbt da dietro proxy?


85

Come configuro sbt per utilizzare un proxy?

Ad esempio, le mie esigenze definizione di compilazione per la connessione a GitHub, specificando parametri di connessione per http.proxy, http.proxyPort, user, e password.

Come passerei queste impostazioni a sbt?

Esiste un modo semplice per passare dalle impostazioni proxy / no proxy per quando lavoro da casa?

Risposte:


135

sbt rispetta le normali variabili d'ambiente per le impostazioni del proxy http:

export JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password"

( Ovviamente, assumendo Unix (Linux / OSX ecc.) Su Windows potresti semplicemente impostare la stessa variabile d'ambiente ( %JAVA_OPTS%) come al solito nel modo Windows. )

Quindi esegui sbtcome al solito:

sbt

Passare da proxy a no-proxy dovrebbe essere una questione di impostare un piccolo script che puoi 'sgranocchiare' ogni volta che ne hai bisogno.

Trabocchetti

  • Non includere "http: //" nel yourservervalore
  • Non includere la porta nel yourservervalore
  • Probabilmente vorrai anche includere https.proxyHoste https.proxyPortpoiché molte cose funzionano su https
  • Se il tuo proxy richiede l'autenticazione, non preoccuparti nemmeno di provare a meno che non utilizzi solo l'autenticazione di base poiché SBT non supporta nient'altro. Inoltre, fai sempre attenzione alle credenziali di testo chiare nelle variabili di ambiente! Assicurati di rimuovere i comandi dal tuo .bash_history utilizzando un metodo di modifica del testo che non creerà file di traccia (tecnicamente dovresti shredo srml'intero file). Se sei su Windows, non preoccuparti, la tua sicurezza è già incasinata e non puoi fare più danni.

1
Grazie, questa è la risposta corretta. Si scopre che il mio vero problema è che il mio proxy blocca le porte usate da GIT, quindi devo usare il protocollo http.
supyo

4
+1 Tuttavia, su Windows 7, dal prompt dei comandi ho dovuto utilizzare set JAVA_OPTS=-Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=passwordper farlo funzionare.
HeatfanJohn

4
Non funziona per me, continuo a ricevere "Il tuo proxy richiede l'autenticazione" e non riesce a dl deps. Sono dietro un vecchio NTLM :(
samthebest

6
Dopo averlo capito, mi sono reso conto che nel mio caso DEVO usare il parametro di sistema java HTTPS -Dhttps.proxyHost e -Dhttps.proxyPort!
Conny Kreyßel

1
Nel caso tu sia dietro un vecchio NTLM, ti consiglio di usare CNTLM, per me funziona
Elouan Keryell-Even

25

sbt funziona in modo abbastanza standard rispetto al modo in cui sono normalmente configurati altri progetti basati su JVM.

sbt è infatti due "sottosistemi": il launcher e il core. Di solito xsbt.boot.Bootviene eseguito prima che il core si avvii con le funzionalità che tutti conosciamo (e ad alcuni piacciono).

È quindi una questione di come si esegue sbt che dice come è possibile impostare un proxy per il traffico di rete HTTP, HTTPS e FTP.

Di seguito è riportato l'intero elenco delle proprietà disponibili che possono essere impostate per qualsiasi applicazione Java, sbt inclusa, che istruisce l'API Java a instradare la comunicazione attraverso un proxy:

  • http_proxy
  • http_proxy_user
  • http_proxy_pass
  • http.proxyHost
  • http.proxyPort
  • http.proxyUser
  • http.proxyPassword

Sostituisci httpsopra con httpse ftpper ottenere l'elenco delle proprietà per i servizi.

Alcuni sbtscript vengono utilizzati JAVA_OPTSper configurare le impostazioni proxy con -Dhttp.proxyHoste -Dhttp.proxyPorttra gli altri (elencati sopra). Vedere Rete e proxy Java .

Alcuni script vengono forniti con il proprio modo di impostare la configurazione del proxy utilizzando la SBT_OPTSproprietà .sbtoptso (solo su Windows) %SBT_HOME%\conf\sbtconfig.txt. È possibile utilizzarli per impostare specificamente sbt per utilizzare i proxy mentre le altre applicazioni basate su JVM non sono affatto interessate.

Dallo sbtstrumento della riga di comando:

# jvm options and output control
JAVA_OPTS          environment variable, if unset uses "$java_opts"
SBT_OPTS           environment variable, if unset uses "$default_sbt_opts"
.sbtopts           if this file exists in the current directory, it is
                   prepended to the runner args
/etc/sbt/sbtopts   if this file exists, it is prepended to the runner args
-Dkey=val          pass -Dkey=val directly to the java runtime
-J-X               pass option -X directly to the java runtime 
                   (-J is stripped)
-S-X               add -X to sbt's scalacOptions (-S is stripped)

E qui arriva un estratto da sbt.bat:

@REM Envioronment:
@REM JAVA_HOME - location of a JDK home dir (mandatory)
@REM SBT_OPTS  - JVM options (optional)
@REM Configuration:
@REM sbtconfig.txt found in the SBT_HOME.

Fate attenzione con sbtconfig.txtche appena funziona su Windows solo . Quando utilizzi cygwinil file non viene consultato e dovrai ricorrere ad altri approcci.

Sto usando sbt con il seguente script:

$JAVA_HOME/bin/java $SBT_OPTS -jar /Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar "$@"

Lo scopo dello script è utilizzare l'ultima versione di sbt compilata dai sorgenti (ecco perché sto usando /Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar) con la $SBT_OPTSproprietà come mezzo per passare le proprietà JVM agli usi sbt di JVM.

Lo script sopra mi consente di impostare il proxy sulla riga di comando su MacOS X come segue:

SBT_OPTS="-Dhttp.proxyHost=proxyhost -Dhttp.proxyPort=9999" sbt

Come puoi vedere, ci sono molti approcci per impostare il proxy per sbt che praticamente si riducono a impostare un proxy per gli usi di sbt di JVM.


13

In ambiente Windows, aggiungi semplicemente la seguente riga in sbt / sbtconfig.txt

-Dhttp.proxyHost=PROXYHOST 
-Dhttp.proxyPort=PROXYPORT 
-Dhttp.proxyUser=USERNAME 
-Dhttp.proxyPassword=XXXX

o l'equivalente Https (grazie ai commenti)

-Dhttps.proxyHost=PROXYHOST 
-Dhttps.proxyPort=PROXYPORT 
-Dhttps.proxyUser=USERNAME 
-Dhttps.proxyPassword=XXXX

3
Questo ha funzionato per me fintanto che ho aggiunto anche un'altra riga in sbtconfig.txt con le proprietà equivalenti https . Ho usato esattamente gli stessi valori delle proprietà http corrispondenti. Quindi: -Dhttps.proxyHost = PROXYHOST -Dhttps.proxyPort = PROXYPORT -Dhttps.proxyUser = USERNAME -Dhttps.proxyPassword = XXXX
snark

5
NOTA IMPORTANTE: non funziona più! Devi invece usare il sbt/conf/sbtoptsfile.
asachet

@ antoine-sac dove posso trovare il sbt/conf/sbtoptsfile per impostare il proxy?
krozaine

1
@krozaine nella directory di installazione sbt - il mio era sotto C:\Program Files (x86)\sbt\conf\sbtopts- ovviamente su Windows.
asachet

@ antoine-sac sembra funzionare per me senza toccare il sbtoptsfile
enissay

12

Ho usato (questo è un ambiente unix):

export SBT_OPTS="$SBT_OPTS -Dhttp.proxyHost=myproxy-Dhttp.proxyPort=myport"

Questo non ha funzionato per la mia configurazione:

export JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=myproxy-Dhttp.proxyPort=myport"

Nel file sbt.sh:

JAVA_OPTS          environment variable, if unset uses "$java_opts"
SBT_OPTS           environment variable, if unset uses "$default_sbt_opts"

Ma a quanto pare viene utilizzato SBT_OPTS invece di JAVA_OPTS


Non riesco a trovare in Internet dove devo inserire il sbt.shfile nel mio progetto!
hadilq

La variabile ENV SBT_OPTS è stata l'unica cosa che ha funzionato per me su CentOS
Icarus

9

Per gli utenti Windows, inserisci il seguente comando:

set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080

3
Nel mio caso ho dovuto aggiungere anche le impostazioni per https ... codeset JAVA_OPTS = -Dhttp.proxySet = true -Dhttp.proxyHost = <Proxy Server> -Dhttp.proxyPort = <Port> -Dhttp.proxyUser = <Username> - Dht tp.proxyPassword = <Password> -Dhttps.proxySet = true -Dhttps.proxyHost = <Proxy Server> -Dhttps.proxyPort = <Port> -Dhttps.proxyUser = <Username> -Dhttp s.proxyPassword = <Password>code
Ar

6

Per fornire una risposta che funzioni per tutti gli utenti Windows:

Aggiungi quanto segue al tuo sbtconfig.txt (C: \ Program Files (x86) \ sbt \ conf)

-Dhttp.proxyHost=XXXXXXX -Dhttp.proxyPort=YYYY -Dhttp.proxySet=true -Dhttps.proxyHost=XXXXXXX -Dhttps.proxyPort=YYYY -Dhttps.proxySet=true

Sostituisci sia XXXXXXX con il tuo proxyHost, sia YYYY con il tuo proxyPort.

Se ricevi l'errore "Impossibile trovare o caricare la classe principale" devi impostare il tuo JAVA_HOME:

set JAVA_HOME=C:\Progra~1\Java\jdkxxxxxx

Quando su Windows a 64 bit, usa:

Progra ~ 1 = "File di programma"

Progra ~ 2 = 'File di programma (x86)'


4

Aggiungi sia la configurazione http che https:

export JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password"

export JAVA_OPTS="$JAVA_OPTS -Dhttps.proxyHost=yourserver -Dhttps.proxyPort=8080 -Dhttps.proxyUser=username -Dhttps.proxyPassword=password"

(La configurazione https è obbligatoria, poiché molti URL a cui fanno riferimento le librerie sbt sono https)

In realtà, ho anche avuto un ambiente in più 'http.proxySet'per 'true'in entrambe le voci di configurazione.


3

Quando ho aggiunto le informazioni sul proxy a% JAVA_OPTS%, ho ricevuto un errore "-Dhttp.proxyHost = il tuo server era inaspettato in questo momento". Ho inserito le informazioni sul proxy in% SBT_OPTS% e ha funzionato.


6
Su Windows ho riscontrato lo stesso errore ma l'impostazione SBT_OPTS ha corretto l'errore ma non ha impostato il proxy. La soluzione era impostare JAVA_OPTS o SBT_OPTS ma senza le virgolette attorno al valore.
pgras

2

Utilizzando

sbt -Dhttp.proxyHost=yourServer-Dhttps.proxyHost=yourServer -Dhttp.proxyPort=yourPort -Dhttps.proxyPort=yourPort

funziona in Ubuntu 15.10 x86_64 x86_64 GNU / Linux.

Sostituisci yourServer con l'indirizzo corretto senza i prefissi http: // né https: // in Dhttp e Dhttps, rispettivamente. Ricorda di evitare le virgolette. Nessun usr / pass incluso nella riga di codice, per includerlo basta aggiungere -Dhttp.proxyUser = usr -Dhttp.proxyPassword = pass con gli stessi criteri di digitazione. Grazie @ Jacek Laskowski !. Saluti


da nessuna parte è la riga di comando pulita per copiare e incollare rapidamente, solo quel ragazzo @mad!
user278049

2

Ho trovato utile un elemento nella sezione FAQ di Lightbend Activator. Sto usando Activator, che a sua volta utilizza SBT, quindi non sono sicuro che questo aiuti gli utenti solo con SBT, ma se usi Activator, come me, e sei dietro un proxy, segui le istruzioni nella sezione "Dietro un proxy" del FAQ:

https://www.lightbend.com/activator/docs

Nel caso in cui il contenuto scompaia, ecco un copia-incolla:

Quando si esegue Activator dietro un proxy, è necessaria una configurazione aggiuntiva. Innanzitutto, apri il file di configurazione dell'attivatore, che si trova nella directory home dell'utente in ~ / .activator / activatorconfig.txt. Notare che questo file potrebbe non esistere. Aggiungi le seguenti righe (un'opzione per riga):

-Dhttp.proxyHost=PUT YOUR PROXY HOST HERE
-Dhttp.proxyPort=PUT YOUR PROXY PORT HERE
-Dhttp.nonProxyHosts="localhost|127.0.0.1"
-Dhttps.proxyHost=PUT YOUR HTTPS PROXY HOST HERE
-Dhttps.proxyPort=PUT YOUR HTTPS PROXY PORT HERE
-Dhttps.nonProxyHosts="localhost|127.0.0.1"

2

SBT utilizza sia HTTP / HTTPS / SFTP / SSH che altri tipi di connessioni a un repository. quindi, se dietro un proxy, questi protocolli dovrebbero essere disponibili.

Nella maggior parte dei casi semplici su Windows, è sufficiente passare le opzioni dei parametri proxy a JVM, come:

java -Dhttp.proxyHost=myproxy -Dhttp.proxyPort=8080

Questo funzionerà.

Ma in caso contrario, ci sono alcune cose di cui dovresti essere a conoscenza:

  1. se stai effettuando una connessione HTTPS al repository.
  2. se i certificati server sono stati importati in jre cacerts
  3. se il tuo proxy sostituirà i certificati del tuo server

per risolvere prima, dovresti passare il parametro proxy https a jvm, come:

java -Dhttps.proxyHost=myproxy -Dhttps.proxyPort=8080 -Djavax.net.ssl.trustStore=${TRUST_STORE_PATH}

per risolvere il secondo, dovresti importare il file ca. ci sono molti suggerimenti.

per risolvere il terzo, potresti prendere in considerazione l'utilizzo di un proxy di autenticazione.

Per semplificare la configurazione di SBT, fornisce sbtconfig.txt e sbtops nella directory conf, esaminalo.

Riferimento:
http://www.scala-sbt.org/0.13/docs/Setup-Notes.html
http://www.scala-sbt.org/1.0/docs/Publishing.html


che tipo di messaggio di errore ricevi quando si tratta di un problema di certificato? Quando utilizzo le proprietà http, ricevo un messaggio chiaro che dice che probabilmente sono dietro un proxy, ecc. Quando passo alle proprietà httpS, non ho più il messaggio, quindi presumo che sia meglio ... ma ho problemi come descritto qui: stackoverflow.com/questions/43464585/…
Vincent F

1

Su Mac OS X / El Capitan puoi impostare le variabili d'ambiente java:

$launchctl setenv _JAVA_OPTIONS "-Dhttp.proxyHost=192.168.1.54 -Dhttp.proxyPort=9999"

1

Ho scoperto che l'avvio di IntelliJ IDEA dal terminale mi ha permesso di connettermi e scaricare su Internet. Per iniziare da terminale, digita:

$ idea


0

Se stai usando un proxy che richiede l'autenticazione, ho una soluzione per te :)

Come ha spiegato @Faiz sopra, SBT ha difficoltà a gestire il proxy che richiede l'autenticazione. La soluzione è aggirare questa autenticazione, se non è possibile disattivare il proxy su richiesta (ad esempio, proxy aziendale). Per fare ciò, ti suggerisco di utilizzare un proxy squid e configurarlo con il tuo nome utente e password per accedere al tuo proxy aziendale. Vedi: https://doc.ubuntu-fr.org/squid Quindi, puoi impostare le variabili d'ambiente JAVA_OPTS o SBT_OPTS in modo che SBT si connetta al tuo proxy squid locale invece che al tuo proxy aziendale:

export JAVA_OPTS = "-Dhttps.proxyHost = localhost -Dhttps.proxyPort = 3128 -Dhttp.proxyHost = localhost -Dhttp.proxyPort = 3128"

(basta c / c questo nel tuo bashrc senza modificare nulla e dovrebbe funzionare bene).

Il trucco è che Squid Proxy non richiede alcuna autenticazione e funge da intermediario tra SBT e l'altro proxy.

Se hai problemi nell'applicazione di questo consiglio, fatemelo sapere.

Saluti,

Edgar


0

Per coloro che ancora atterrano su questo thread cercando di trovare dove / come configurare il proxy HTTP in IntelliJ, ecco come sono riuscito a farlo funzionare per me. Spero che possa aiutare!

(Nota: specifica il nome utente e la password di rete nelle caselle corrispondenti): -

inserisci qui la descrizione dell'immagine


0

Prova a fornire i dettagli del proxy come parametri

sbt compile -Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port

Se non funziona, prova con JAVA_OPTS (non Windows)

export JAVA_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"

sbt compile

o (finestre)

set JAVA_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"
sbt compile

se non funziona nulla, imposta SBT_OPTS

(non windows)

export SBT_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"'
sbt compile

o (finestre)

set SBT_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"
sbt compile
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.