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


¿Cómo configuro sbt para usar un proxy?

Por ejemplo, mi definición de compilación necesita conectarse a GitHub, especificando parámetros de conexión para http.proxy, http.proxyPort, user, y password.

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

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

 78
sbt
Author: Jacek Laskowski, 2012-12-10

13 answers

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, simplemente puede establecer la misma variable de entorno (%JAVA_OPTS%) como de costumbre en Windows.)

Luego ejecuta sbt como de costumbre:

sbt

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

Gotchas

  • No incluir "http: / /" en el valor yourserver
  • No incluya el puerto en el valor yourserver
  • Probablemente también quieras incluir https.proxyHost y https.proxyPort ya que muchas cosas funcionan sobre 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 de borrar credenciales de mensajes de texto en variables de entorno! Asegúrese de eliminar los comandos de su .bash_history usando una edición de texto método que no creará archivos de seguimiento (técnicamente debería shred o srm el archivo completo). Si está en Windows, no se preocupe, su seguridad ya está en mal estado, no puede hacer más daño.
 121
Author: Faiz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-09 09:55:51

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

Sbt es de hecho dos "subsistemas" - el lanzador y el núcleo. Por lo general, xsbt.boot.Boot se ejecuta antes de que el núcleo se inicie con las características que todos conocemos (y a algunos incluso les gusta).

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 los propiedades disponibles que se pueden establecer para cualquier aplicación Java, incluyendo sbt, que instruyan 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

Reemplazar http arriba con https y ftp para obtener la lista de las propiedades de los servicios.

Algunos sbt scripts usan JAVA_OPTS para configurar la configuración del proxy con -Dhttp.proxyHost y -Dhttp.proxyPort entre los otros (enumerados anteriormente). Ver Redes y Proxies Java .

Algunos scripts vienen con su propia forma de configurar el proxy usando la propiedad SBT_OPTS, .sbtopts o (solo en Windows) %SBT_HOME%\conf\sbtconfig.txt. Puede usarlos para establecer específicamente que sbt use proxies mientras que las otras aplicaciones basadas en JVM no se ven afectadas en absoluto.

Desde la herramienta de línea de comandos sbt:

# 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 sbtconfig.txtque solo funciona en Windows solo. Cuando se utiliza cygwin el archivo no se consulta y se tendrá que recurrir a 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 (es por eso que estoy usando /Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar) con la propiedad $SBT_OPTS como un medio para pasar las propiedades JVM a la JVM que usa 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 establecer proxy para sbt que prácticamente se reducen a establecer un proxy para la JVM que usa sbt.

 23
Author: Jacek Laskowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-29 20:28:23

En el entorno 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 Https (gracias a los comentarios)

-Dhttps.proxyHost=PROXYHOST 
-Dhttps.proxyPort=PROXYPORT 
-Dhttps.proxyUser=USERNAME 
-Dhttps.proxyPassword=XXXX
 10
Author: Enis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-06 09:01:05

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 sbt.sh archivo:

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

Pero aparentemente se usa SBT_OPTS en lugar de JAVA_OPTS

 9
Author: blue-sky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-29 15:22:10

Para los usuarios de Windows, introduzca el siguiente comando:

set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080
 8
Author: rphonika,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-05 06:42:27

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

Agregue lo siguiente a su 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

Reemplace ambos XXXXXXXcon su proxyHost, y ambos YYYY con su proxyPort.

Si obtiene 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)'

 5
Author: King Julian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-05 06:27:17

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 https es obligatoria, ya que muchas urls referidas por las bibliotecas sbt son https)

De hecho, incluso tenía un ajuste adicional 'http.proxySet' a 'true' en ambas entradas de configuración.

 4
Author: Parasouramane D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-16 12:46:54

Cuando agregué la información del proxy al %JAVA_OPTS%, obtuve un error "-Dhttp.proxyHost = yourserver was unexpected at this time"(en inglés). Puse la información del proxy en % SBT_OPTS% y funcionó.

 3
Author: craigpfeifer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-12 15:26:33

Usando

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 su servidor 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 incluirlo solo agregue-Dhttp.proxyUser = usr-Dhttp.proxyPassword = pase con los mismos criterios de escritura. Gracias @ Jacek Laskowski!. Salud

 2
Author: user278049,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-01-14 15:44:23

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 con solo 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 las Preguntas frecuentes:

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

En caso de que el contenido desaparezca, aquí hay un copy-paste:

Cuando se ejecuta activador detrás de un proxy, algunos adicionales configuración es necesario. Primero, abra el archivo de configuración del activador, que se encuentra en su directorio personal del usuario bajo~/.activador/activatorconfig.txt. Tenga en cuenta que este archivo puede no existir. 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"
 2
Author: Peter Perháč,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-18 10:18:59

SBT usa tanto HTTP/HTTPS/SFTP/SSH como otro tipo de conexiones a un repositorio. así que cuando detrás de un proxy, estos protocolos deben estar disponibles.

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

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

Eso servirá.

Pero si no, hay pocas cosas de las que deberías estar consciente:

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

Para resolver primero, debe pasar el parámetro 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 la ca. hay muchos consejos.

Para resolver el tercero, tal vez podría considerar el uso de un proxy de autenticación.

Para simplificar la configuración de SBT, proporciona sbtconfig.txt y sbtops en el directorio conf, míralo.

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

 2
Author: Jin Wang,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-26 06:47:30

Encontré que iniciar IntelliJ IDEA desde terminal me permitió conectarme y descargar a través de Internet. Para comenzar desde terminal, escriba:

$ idea

 1
Author: krozaine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-02 13:46:30

En Mac OS X / El Capitan puede establecer variables de entorno java:

$launchctl setenv _JAVA_OPTIONS "-Dhttp.proxyHost=192.168.1.54 -Dhttp.proxyPort=9999"
 0
Author: Adrian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-12-29 20:13:51