¿Cómo usar sbt desde detrás del proxy?

85

¿Cómo configuro sbt para usar un proxy?

Por ejemplo, mis necesidades de definición de build para conectarse a GitHub, especificando los parámetros de conexión para http.proxy, http.proxyPort,user , y password.

¿Cómo pasaría estos ajustes a sbt?

¿Existe una manera fácil de cambiar entre la configuración de proxy / sin proxy para cuando trabajo desde casa?

supyo
fuente

Respuestas:

135

sbt respeta las variables de entorno habituales para la configuración del proxy http:

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

( Eso es, por supuesto, asumiendo Unix (Linux / OSX, etc.). En Windows, puede configurar la misma variable de entorno ( %JAVA_OPTS%) como de costumbre en Windows ) .

Luego ejecuta sbtcomo de costumbre:

sbt

Cambiar entre proxy / no-proxy debería ser una cuestión de configurar un pequeño script que pueda 'sorber' cuando lo necesite.

Gotchas

  • No incluya "http: //" en el yourservervalor
  • No incluya el puerto en el yourservervalor
  • Probablemente también desee incluir https.proxyHosty, https.proxyPortdado que muchas cosas funcionan en https
  • Si su proxy requiere autenticación, ni siquiera se moleste en intentarlo a menos que solo use autenticación básica, ya que SBT no admite nada más. ¡También siempre tenga cuidado con las credenciales claras de mensajes de texto en las variables de entorno! Asegúrese de eliminar los comandos de su .bash_history utilizando un método de edición de texto que no creará archivos de seguimiento (técnicamente debería hacerlo shredo srmel archivo completo). Si está en Windows, no se preocupe, su seguridad ya está estropeada y no puede hacer más daño.
Faiz
fuente
1
Gracias, esta es la respuesta correcta. Resulta que mi problema real es que mi proxy bloquea los puertos que usa GIT, así que tengo que usar el protocolo http.
supyo
4
+1 Sin embargo, en Windows 7, desde el símbolo del sistema que tuve que usar set JAVA_OPTS=-Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=passwordpara que esto funcionara.
HeatfanJohn
4
No funciona para mí, sigo recibiendo "Su proxy requiere autenticación" y no se dl deps. Estoy detrás de un NTLM heredado :(
samthebest
6
Después de averiguarlo, me di cuenta de que, en mi caso, DEBO usar el parámetro del sistema HTTPS java -Dhttps.proxyHost y -Dhttps.proxyPort!
Conny Kreyßel
1
En caso de que esté detrás de un NTLM heredado, recomiendo usar CNTLM, funciona para mí
Elouan Keryell-Even
25

sbt funciona de una manera bastante estándar en comparación con la forma en que normalmente se configuran otros proyectos basados ​​en JVM.

sbt es de hecho dos "subsistemas": el lanzador y el núcleo. Por lo general, xsbt.boot.Bootse ejecuta antes de que se inicie el núcleo con las funciones que todos conocemos (y algunas incluso nos gustan).

Por lo tanto, es una cuestión de cómo ejecutar sbt que dice cómo podría configurar un proxy para el tráfico de red HTTP, HTTPS y FTP.

La siguiente es la lista completa de las propiedades disponibles que se pueden configurar para cualquier aplicación Java, incluido SBT, que instruye a la API de Java para enrutar la comunicación a través de un proxy:

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

Reemplace httparriba con httpsy ftppara obtener la lista de propiedades de los servicios.

Algunas sbtsecuencias de comandos se utilizan JAVA_OPTSpara configurar la configuración del proxy con -Dhttp.proxyHosty -Dhttp.proxyPortentre los demás (enumerados anteriormente). Consulte Proxies y redes de Java .

Algunos scripts vienen con su propia forma de configurar la configuración del proxy utilizando la SBT_OPTSpropiedad .sbtoptso (solo en Windows) %SBT_HOME%\conf\sbtconfig.txt. Puede usarlos para configurar sbt específicamente para usar proxies mientras que las otras aplicaciones basadas en JVM no se ven afectadas en absoluto.

Desde la sbtherramienta de línea de 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)

Y aquí viene un extracto de 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.

Tenga cuidado con el sbtconfig.txtque funciona en Windows solamente . Cuando utilizas cygwinel archivo no se consulta y tendrás que recurrir a utilizar los otros enfoques.

Estoy usando sbt con el siguiente 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 "$@"

El objetivo del script es usar la última versión de sbt construida a partir de las fuentes (por eso estoy usando /Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar) con $SBT_OPTSproperty como un medio para pasar las propiedades de JVM a los usos de JVM sbt.

El script anterior me permite configurar el proxy en la línea de comandos en MacOS X de la siguiente manera:

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

Como puede ver, hay muchos enfoques para configurar el proxy para sbt que básicamente se reducen a configurar un proxy para los usos de JVM sbt.

Jacek Laskowski
fuente
13

En el entorno de Windows, simplemente agregue la siguiente línea en sbt / sbtconfig.txt

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

o el equivalente de Https (gracias a los comentarios)

-Dhttps.proxyHost=PROXYHOST 
-Dhttps.proxyPort=PROXYPORT 
-Dhttps.proxyUser=USERNAME 
-Dhttps.proxyPassword=XXXX
Enis
fuente
3
Esto funcionó para mí siempre que agregué otra línea en sbtconfig.txt con las propiedades equivalentes de https . Usé exactamente los mismos valores que para las propiedades http correspondientes. Por lo tanto: -Dhttps.proxyHost = PROXYHOST -Dhttps.proxyPort = PROXYPORT -Dhttps.proxyUser = USERNAME -Dhttps.proxyPassword = XXXX
snark
4
NOTA IMPORTANTE: ¡ya no funciona! Tienes que usar el sbt/conf/sbtoptsarchivo en su lugar.
asachet
@ antoine-sac ¿dónde puedo encontrar el sbt/conf/sbtoptsarchivo para configurar el proxy?
krozaine
1
@krozaine en el directorio de instalación de sbt - el mío estaba debajo C:\Program Files (x86)\sbt\conf\sbtopts- en Windows obviamente.
asachet
@ antoine-sac parece funcionar para mí sin tocar el sbtoptsarchivo
enissay
12

Usé (este es un entorno Unix):

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

Esto no funcionó para mi configuración:

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

En el archivo sbt.sh:

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

Pero aparentemente SBT_OPTS se usa en lugar de JAVA_OPTS

cielo azul
fuente
¡No encuentro en Internet dónde debo poner el sbt.sharchivo en mi proyecto!
hadilq
La variable SBT_OPTS ENV fue lo único que hizo que me funcionara en CentOS
Icarus
9

Para usuarios de Windows, ingrese el siguiente comando:

set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080
rphonika
fuente
3
En mi caso, tuve que agregar configuraciones para https también ... 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
Arun
6

Para proporcionar una respuesta que funcione para todos los usuarios de Windows:

Agregue lo siguiente a su sbtconfig.txt (C: \ Archivos de programa (x86) \ sbt \ conf)

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

Reemplace tanto XXXXXXX con su proxyHost y ambos YYYY con su proxyPort.

Si recibe el error "No se pudo encontrar o cargar la clase principal", debe configurar su JAVA_HOME:

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

Cuando esté en Windows de 64 bits, use:

Progra ~ 1 = 'Archivos de programa'

Progra ~ 2 = 'Archivos de programa (x86)'

JayL
fuente
4

Agregue la configuración http y 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 configuración de https es imprescindible, ya que muchas URL referidas por las bibliotecas sbt son https)

De hecho, incluso tuve un escenario adicional 'http.proxySet'a 'true'tanto en las entradas de configuración.

Parasouramane D
fuente
3

Cuando agregué la información del proxy al% JAVA_OPTS%, recibí un error "-Dhttp.proxyHost = yourserver was inesperado en este momento". Puse la información del proxy en% SBT_OPTS% y funcionó.

craigpfeifer
fuente
6
En Windows tuve el mismo error, pero la configuración de SBT_OPTS corrigió el error pero no configuré el proxy. La solución fue establecer JAVA_OPTS o SBT_OPTS pero sin las comillas alrededor del valor.
Gradas
2

Utilizando

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

funciona en Ubuntu 15.10 x86_64 x86_64 GNU / Linux.

Reemplace yourServer por la dirección adecuada sin los prefijos http: // ni https: // en Dhttp y Dhttps, respectivamente. Recuerde evitar las comillas. No se incluye usr / pass en la línea de código, para incluir eso solo agregue -Dhttp.proxyUser = usr -Dhttp.proxyPassword = pass con los mismos criterios de escritura. ¡Gracias @Jacek Laskowski !. Salud

user278049
fuente
en ninguna parte es la línea de comandos limpia para copiar y pegar rápidamente, ¡solo ese @ loco!
user278049
2

Encontré útil un elemento en la sección de preguntas frecuentes de Lightbend Activator. Estoy usando Activator, que a su vez usa SBT, así que no estoy seguro de si esto ayuda a los usuarios solo con SBT, pero si usa Activator, como yo, y está detrás de un proxy, siga las instrucciones en la sección "Detrás de un proxy" de la PREGUNTAS MÁS FRECUENTES:

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

En caso de que el contenido desaparezca, aquí tienes una copia y pega:

Cuando se ejecuta el activador detrás de un proxy, se necesita alguna configuración adicional. Primero, abra el archivo de configuración del activador, que se encuentra en el directorio de inicio de su usuario en ~ / .activator / activatorconfig.txt. Tenga en cuenta que es posible que este archivo no exista. Agregue las siguientes líneas (una opción por línea):

-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"
Peter Perháč
fuente
2

SBT utiliza tanto HTTP / HTTPS / SFTP / SSH como otros tipos de conexiones a un repositorio. por lo que cuando esté detrás de un proxy, estos protocolos deberían estar disponibles.

En la mayoría de los casos simples en Windows, solo necesita pasar opciones de parámetros de proxy a JVM, como:

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

Que hará.

Pero si no es así, hay algunas cosas que debe tener en cuenta:

  1. si está haciendo una conexión HTTPS al repositorio.
  2. si los certificados de servidor se han importado a jre cacerts
  3. si su proxy reemplazaría sus certificados de servidor

para resolver primero, debe pasar el parámetro de proxy https a jvm, como:

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

para resolver el segundo, debe importar el ca. hay muchos consejos.

para resolver el tercero, quizás podría considerar usar un proxy de autenticación.

para simplificar la configuración de SBT, proporciona sbtconfig.txt y sbtops en el directorio conf, búsquelo.

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

Jin Wang
fuente
¿Qué tipo de mensaje de error recibe cuando se trata de un problema de certificado? Cuando utilizo propiedades http, recibo un mensaje claro que dice que probablemente estoy detrás de un proxy, etc. Cuando cambio a las propiedades httpS, ya no tengo el mensaje, así que supongo que es mejor ... pero tengo problemas como se describe aquí: stackoverflow.com/questions/43464585/…
Vincent F
1

En Mac OS X / El Capitan, puede configurar las variables de entorno de Java:

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

Descubrí que al iniciar IntelliJ IDEA desde la terminal, me permitía conectarme y descargar a través de Internet. Para comenzar desde la terminal, escriba:

$ idea

krozaine
fuente
0

Si está utilizando un proxy que requiere autenticación, tengo una solución para usted :)

Como @Faiz explicó anteriormente, SBT tiene muchas dificultades para manejar el proxy que requiere autenticación. La solución es omitir esta autenticación, si no puede desactivar su proxy a pedido (proxy corporativo, por ejemplo). Para hacerlo, le sugiero que use un proxy squid y lo configure con su nombre de usuario y contraseña para acceder a su proxy corporativo. Ver: https://doc.ubuntu-fr.org/squid Luego, puede configurar las variables de entorno JAVA_OPTS o SBT_OPTS para que SBT se conecte a su propio proxy squid local en lugar de su proxy corporativo:

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

(solo c / c this en su bashrc sin modificar nada y debería funcionar bien).

El truco es que Squid Proxy no requiere autenticación y actúa como intermediario entre SBT y su otro proxy.

Si tiene problemas para aplicar este consejo, hágamelo saber.

Saludos,

Edgar

Edgar L.
fuente
0

Para aquellos que aún aterrizan en este hilo tratando de encontrar dónde / cómo configurar el proxy HTTP en IntelliJ, así es como logré que funcione para mí. ¡Espero que esto ayude!

(Nota: especifique su nombre de usuario y contraseña de red en los cuadros correspondientes): -

ingrese la descripción de la imagen aquí

Deej
fuente
0

Intente proporcionar los detalles del proxy como parámetros

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

Si eso no funciona, intente con JAVA_OPTS (sin Windows)

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

sbt compile

o (ventanas)

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

si nada funciona, configure SBT_OPTS

(sin ventanas)

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

o (ventanas)

set SBT_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"
sbt compile
Manjunath G
fuente