Como usar o sbt por trás do proxy?

85

Como eu configuro o sbt para usar um proxy?

Por exemplo, as minhas necessidades definição de compilação para se conectar ao GitHub, especificando os parâmetros de conexão para http.proxy, http.proxyPort, usere password.

Como eu passaria essas configurações para o sbt?

Existe uma maneira fácil de alternar entre as configurações de proxy / sem proxy para quando eu trabalhar em casa?

supyo
fonte

Respostas:

135

sbt respeita as variáveis ​​de ambiente usuais para configurações de proxy http:

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

( Isso é claro, assumindo Unix (Linux / OSX etc.). No Windows, você pode apenas definir a mesma variável de ambiente ( %JAVA_OPTS%) como de costume no modo Windows. )

Em seguida, execute sbtcomo de costume:

sbt

Alternar entre proxy / no-proxy deve ser uma questão de configurar um pequeno script que você pode 'engolir' sempre que precisar.

Pegadinhas

  • Não inclua "http: //" no yourservervalor
  • Não inclua a porta no yourservervalor
  • Você provavelmente também deseja incluir https.proxyHoste, https.proxyPortcomo muitas coisas funcionam em https
  • Se o seu proxy requer autenticação, nem se preocupe em tentar, a menos que ele apenas use a autenticação básica, pois o SBT não oferece suporte a mais nada. Também sempre tome cuidado com as credenciais de mensagens de texto claras nas variáveis ​​de ambiente! Certifique-se de remover os comandos do seu .bash_history usando um método de edição de texto que não criará arquivos de rastreamento (tecnicamente você deveria shredou srmo arquivo inteiro). Se você está no Windows, não se preocupe com isso, sua segurança já está bagunçada, você não pode mais causar danos.
Faiz
fonte
1
Obrigado, esta é a resposta correta. Acontece que meu verdadeiro problema é que meu proxy bloqueia as portas usadas pelo GIT, então tenho que usar o protocolo http.
supyo
4
1 No entanto, no Windows 7, a partir do prompt de comando eu tive que usar set JAVA_OPTS=-Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=passwordpara fazer isso funcionar.
HeatfanJohn
4
Não funciona para mim, continuo recebendo "Seu proxy requer autenticação" e não consegue dl deps. Estou por trás de um NTLM legado :(
samthebest
6
Depois que descobri - percebi que, no meu caso, devo usar o parâmetro de sistema HTTPS java -Dhttps.proxyHost e -Dhttps.proxyPort!
Conny Kreyßel de
1
Caso você esteja atrás de um NTLM legado, recomendo o uso do CNTLM, ele funciona para mim
Elouan Keryell-Even
25

sbt funciona de uma maneira razoavelmente padrão em comparação com a maneira como outros projetos baseados em JVM são normalmente configurados.

sbt é, na verdade, dois "subsistemas" - o iniciador e o núcleo. Geralmente xsbt.boot.Booté executado antes do núcleo inicializar com os recursos que todos nós conhecemos (e alguns até gostam).

Portanto, é uma questão de como você executa o sbt que diz como você pode configurar um proxy para o tráfego de rede HTTP, HTTPS e FTP.

A seguir está a lista completa das propriedades disponíveis que podem ser definidas para qualquer aplicativo Java, incluindo sbt, que instruem a API Java a rotear a comunicação por meio de um proxy:

  • proxy HTTP
  • http_proxy_user
  • http_proxy_pass
  • http.proxyHost
  • http.proxyPort
  • http.proxyUser
  • http.proxyPassword

Substitua httpacima por httpse ftppara obter a lista das propriedades dos serviços.

Alguns sbtscripts são usados JAVA_OPTSpara definir as configurações de proxy com -Dhttp.proxyHoste -Dhttp.proxyPortentre os outros (listados acima). Consulte Rede Java e proxies .

Alguns scripts vêm com sua própria maneira de definir a configuração do proxy usando a SBT_OPTSpropriedade .sbtoptsou (somente no Windows)%SBT_HOME%\conf\sbtconfig.txt . Você pode usá-los para definir especificamente o sbt para usar proxies, enquanto os outros aplicativos baseados em JVM não são afetados.

Na sbtferramenta de linha 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)

E aqui vem um trecho 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.

Tenha cuidado com sbtconfig.txtque apenas funciona no Windows única . Quando você usa cygwino arquivo não é consultado e você terá que recorrer ao uso de outras abordagens.

Estou usando sbt com o seguinte 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 "$@"

O objetivo do script é usar a versão mais recente do sbt construída a partir das fontes (é por isso que estou usando /Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar) com $SBT_OPTSpropriedade como um meio de passar propriedades JVM para os usos de JVM sbt.

O script acima me permite definir o proxy na linha de comando no MacOS X da seguinte maneira:

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

Como você pode ver, existem muitas abordagens para definir o proxy para sbt que praticamente se resumem a definir um proxy para o uso do JVM sbt.

Jacek Laskowski
fonte
13

No ambiente Windows, basta adicionar a seguinte linha no sbt / sbtconfig.txt

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

ou o equivalente Https (graças aos comentários)

-Dhttps.proxyHost=PROXYHOST 
-Dhttps.proxyPort=PROXYPORT 
-Dhttps.proxyUser=USERNAME 
-Dhttps.proxyPassword=XXXX
Enis
fonte
3
Isso funcionou para mim, desde que eu também adicionasse outra linha em sbtconfig.txt com as propriedades equivalentes a https . Usei exatamente os mesmos valores das propriedades http correspondentes. Assim: -Dhttps.proxyHost = PROXYHOST -Dhttps.proxyPort = PROXYPORT -Dhttps.proxyUser = USERNAME -Dhttps.proxyPassword = XXXX
snark em
5
NOTA IMPORTANTE: não funciona mais! Você deve usar o sbt/conf/sbtoptsarquivo.
asachet
@ antoine-sac onde posso encontrar o sbt/conf/sbtoptsarquivo para configurar o proxy?
krozaine
1
@krozaine no diretório de instalação do sbt - o meu estava abaixo C:\Program Files (x86)\sbt\conf\sbtopts- no Windows obviamente.
asachet
@ antoine-sac parece funcionar para mim sem mexer no sbtoptsarquivo
enissay
12

Eu usei (este é um ambiente unix):

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

Isso não funcionou para minha configuração:

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

No arquivo sbt.sh:

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

Mas, aparentemente, SBT_OPTS é usado em vez de JAVA_OPTS

céu azul
fonte
Não consigo encontrar na Internet onde devo colocar o sbt.sharquivo no meu projeto!
hadilq
A variável SBT_OPTS ENV foi a única coisa que fez funcionar para mim no CentOS
Ícaro
9

Para usuários do Windows, digite o seguinte comando:

set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080
Rphonika
fonte
3
No meu caso, tive que adicionar configurações para https também ... 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 fornecer uma resposta que funcione para todos os usuários do Windows:

Adicione o seguinte ao seu sbtconfig.txt (C: \ Arquivos de programas (x86) \ sbt \ conf)

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

Substitua XXXXXXX por seu proxyHost e YYYY por seu proxyPort.

Se você receber o erro "Não foi possível encontrar ou carregar a classe principal", será necessário definir seu JAVA_HOME:

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

Quando em janelas de 64 bits, use:

Progra ~ 1 = 'Arquivos de programas'

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

JayL
fonte
4

Adicione configurações de http e 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"

(a configuração https é obrigatória, já que muitos urls referidos pelas bibliotecas sbt são https)

Na verdade, eu até tinha uma configuração extra 'http.proxySet'para 'true'em ambas as entradas de configuração.

Parasouramane D
fonte
3

Quando adicionei as informações do proxy ao% JAVA_OPTS%, recebi um erro "-Dhttp.proxyHost = seu servidor era inesperado neste momento". Coloquei as informações do proxy em% SBT_OPTS% e funcionou.

Craigpfeifer
fonte
6
No windows eu tive o mesmo erro, mas a configuração de SBT_OPTS corrigiu o erro, mas não configurei o proxy. A solução foi definir JAVA_OPTS ou SBT_OPTS, mas sem as aspas em torno do valor.
pgras de
2

Usando

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

funciona no Ubuntu 15.10 x86_64 x86_64 GNU / Linux.

Substitua yourServer pelo endereço adequado sem os prefixos http: // nem https: // em Dhttp e Dhttps, respectivamente. Lembre-se de evitar as aspas. Nenhum usr / pass incluído na linha de código, para incluir isso basta adicionar -Dhttp.proxyUser = usr -Dhttp.proxyPassword = pass com os mesmos critérios de digitação. Obrigado @Jacek Laskowski !. Felicidades

user278049
fonte
em nenhum lugar é a linha de comando limpa para copiar e colar rapidamente, apenas aquele cara @mad!
user278049
2

Achei útil um item na seção FAQ do Lightbend Activator. Estou usando o Activator, que por sua vez usa o SBT, então não tenho certeza se isso ajuda os usuários apenas com o SBT, mas se você usa o Activator, como eu, e está atrás de um proxy, siga as instruções na seção "Atrás de um proxy" do PERGUNTAS FREQUENTES:

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

Caso o conteúdo desapareça, aqui está um copiar e colar:

Ao executar o ativador atrás de um proxy, algumas configurações adicionais são necessárias. Primeiro, abra o arquivo de configuração do ativador, encontrado no diretório inicial do usuário em ~ / .activator / activatorconfig.txt. Observe que este arquivo pode não existir. Adicione as seguintes linhas (uma opção por linha):

-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áč
fonte
2

O SBT usa HTTP / HTTPS / SFTP / SSH e outros tipos de conexões com um repositório. portanto, quando atrás de um proxy, esses protocolos devem estar disponíveis.

Na maioria dos casos simples no Windows, você só precisa passar as opções de parâmetros de proxy para JVM, como:

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

Que vai fazer.

Mas se não, existem algumas coisas das quais você deve estar ciente:

  1. se você estiver fazendo uma conexão HTTPS com o repositório.
  2. se os certificados do servidor foram importados para jre cacerts
  3. se seu proxy substituiria seus certificados de servidor

para resolver primeiro, você deve passar o parâmetro proxy https para jvm, como:

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

para resolver o segundo, você deve importar o ca. há muitas dicas.

para resolver o terceiro, talvez você possa considerar o uso de um proxy de autenticação.

para simplificar a configuração do SBT, forneça sbtconfig.txt e sbtops no diretório conf, examine-o.

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

Jin Wang
fonte
que tipo de mensagem de erro você recebe quando é um problema de certificado? Quando uso propriedades http, recebo uma mensagem clara dizendo que provavelmente estou usando um proxy etc. Quando eu mudo para propriedades httpS, não recebo mais a mensagem, então presumo que seja melhor ... mas recebo problemas conforme descrito aqui: stackoverflow.com/questions/43464585/…
Vincent F
1

No Mac OS X / El Capitan, você pode definir variáveis ​​de ambiente java:

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

Descobri que iniciar o IntelliJ IDEA do terminal me permite conectar e fazer download pela Internet. Para iniciar do terminal, digite:

$ idea

krozaine
fonte
0

Se você estiver usando um proxy que requer autenticação, eu tenho uma solução para você :)

Como @Faiz explicou acima, o SBT tem muita dificuldade em lidar com o proxy que exige autenticação. A solução é contornar essa autenticação, caso não consiga desligar o proxy sob demanda (proxy corporativo, por exemplo). Para isso, sugiro que você use um proxy squid e configure-o com seu nome de usuário e senha para acessar o proxy corporativo. Veja: https://doc.ubuntu-fr.org/squid Em seguida, você pode definir as variáveis ​​de ambiente JAVA_OPTS ou SBT_OPTS para que o SBT se conecte ao seu próprio proxy squid local em vez do proxy corporativo:

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

(apenas c / c isso em seu bashrc sem modificar nada e deve funcionar bem).

O truque é que o Squid Proxy não requer autenticação e atua como um intermediário entre o SBT e o outro proxy.

Se você tiver problemas em aplicar este conselho, por favor me avise.

Saudações,

Edgar

Edgar L.
fonte
0

Para aqueles que ainda estão tentando descobrir onde / como configurar o proxy HTTP no IntelliJ, veja como consegui fazer com que funcionasse para mim. Eu espero que isso ajude!

(Observação: especifique seu nome de usuário e senha de rede nas caixas correspondentes): -

insira a descrição da imagem aqui

Deej
fonte
0

Tente fornecer os detalhes do proxy como parâmetros

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

Se isso não funcionar, tente com JAVA_OPTS (não Windows)

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

sbt compile

ou (windows)

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

se nada funcionar, defina SBT_OPTS

(sem janelas)

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

ou (windows)

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