Jak używać sbt zza proxy?

85

Jak skonfigurować SBT do korzystania z serwera proxy?

Na przykład, moje potrzeby definicji kompilacji, aby połączyć się GitHub, określający parametry połączenia do http.proxy, http.proxyPort, user, i password.

Jak przekazałbym te ustawienia komuś?

Czy istnieje łatwy sposób przełączania się między ustawieniami proxy / no-proxy podczas pracy z domu?

supyo
źródło

Odpowiedzi:

135

sbt przestrzega zwykłych zmiennych środowiskowych dla ustawień proxy http:

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

( Oczywiście przy założeniu, że Unix (Linux / OSX itp.). W systemie Windows można po prostu ustawić tę samą zmienną środowiskową ( %JAVA_OPTS%) jak zwykle w systemie Windows ).

Następnie uruchom sbtjak zwykle:

sbt

Przełączanie się między proxy / no-proxy powinno być kwestią skonfigurowania małego skryptu, który możesz `` siorbać '', kiedy tylko tego potrzebujesz.

Gotchas

  • Nie dodawaj „http: //” do yourserverwartości
  • Nie dołączaj portu do yourserverwartości
  • Prawdopodobnie chcesz również dołączyć, https.proxyHosta https.proxyPortponieważ wiele rzeczy działa przez https
  • Jeśli Twój serwer proxy wymaga uwierzytelnienia, nawet nie próbuj, chyba że używa tylko podstawowego uwierzytelniania, ponieważ SBT nie obsługuje niczego innego. Zawsze uważaj na wyczyszczenie danych uwierzytelniających w zmiennych środowiskowych! Pamiętaj, aby usunąć polecenia z .bash_history za pomocą metody edycji tekstu, która nie utworzy plików śledzenia (technicznie powinieneś shredlub srmcały plik). Jeśli korzystasz z systemu Windows, nie martw się o to, Twoje zabezpieczenia są już zepsute, nie możesz już więcej zaszkodzić.
Faiz
źródło
1
Dzięki, to jest poprawna odpowiedź. Okazuje się, że moim prawdziwym problemem jest to, że moje proxy blokuje porty używane przez GIT, więc muszę używać protokołu http.
supyo
4
+1 Jednak w Windows 7 musiałem użyć wiersza polecenia, set JAVA_OPTS=-Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=passwordaby to zadziałało.
HeatfanJohn
4
Nie działa dla mnie, ciągle otrzymuję komunikat „Twój serwer proxy wymaga uwierzytelnienia” i nie udaje się to z dl deps. Jestem za starszym NTLM :(
samthebest
6
Po tym, jak to rozgryzłem - zdałem sobie sprawę, że w moim przypadku MUSZĘ użyć parametru systemowego HTTPS java -Dhttps.proxyHost i -Dhttps.proxyPort!
Conny Kreyßel
1
Jeśli stoisz za starszym NTLM, polecam używanie CNTLM, to działa dla mnie
Elouan Keryell-Even
25

sbt działa w dość standardowy sposób w porównaniu ze sposobem, w jaki zwykle konfigurowane są inne projekty oparte na JVM.

sbt to w rzeczywistości dwa „podsystemy” - wyrzutnia i rdzeń. To jest zazwyczajxsbt.boot.Boot jest to wykonywane przed uruchomieniem jądra z funkcjami, które wszyscy znamy (a niektórzy nawet lubią).

Dlatego jest to kwestia sposobu wykonania sbt, który mówi, jak skonfigurować proxy dla ruchu sieciowego HTTP, HTTPS i FTP.

Poniżej znajduje się cała lista dostępnych właściwości, które można ustawić dla dowolnej aplikacji Java, w tym sbt, które instruują interfejs Java API, aby kierował komunikację przez serwer proxy:

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

Zamień httppowyżej na httpsi, ftpaby uzyskać listę właściwości usług.

Niektóre sbtskrypty służą JAVA_OPTSdo konfigurowania ustawień proxy za pomocą -Dhttp.proxyHosti -Dhttp.proxyPortmiędzy innymi (wymienione powyżej). Zobacz Sieć Java i serwery proxy .

Niektóre skrypty mają własny sposób konfigurowania konfiguracji proxy za pomocą SBT_OPTSwłaściwości .sbtoptslub (tylko w systemie Windows)%SBT_HOME%\conf\sbtconfig.txt . Można ich użyć, aby specjalnie ustawić sbt do korzystania z serwerów proxy, podczas gdy inne aplikacje oparte na JVM nie mają żadnego wpływu.

Z sbtnarzędzia wiersza poleceń:

# 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)

A oto fragment z 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.

Bądź ostrożny sbtconfig.txt, że tylko działa na Windows tylko . Kiedy używasz cygwinpliku, nie jest konsultowany i będziesz musiał skorzystać z innych podejść.

Używam sbt z następującym skryptem:

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

Celem skryptu jest użycie najnowszej wersji sbt zbudowanej ze źródeł (dlatego używam /Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar) z $SBT_OPTSwłaściwością jako sposobem przekazywania właściwości JVM do JVM, których używa sbt.

Powyższy skrypt pozwala mi ustawić proxy w wierszu poleceń na MacOS X w następujący sposób:

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

Jak widać, istnieje wiele podejść do ustawiania proxy dla sbt, z których wszystko sprowadza się do ustawienia proxy dla używanej przez JVM maszyny sbt.

Jacek Laskowski
źródło
13

W środowisku Windows po prostu dodaj następujący wiersz w sbt / sbtconfig.txt

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

lub odpowiednik Https (dzięki komentarzom)

-Dhttps.proxyHost=PROXYHOST 
-Dhttps.proxyPort=PROXYPORT 
-Dhttps.proxyUser=USERNAME 
-Dhttps.proxyPassword=XXXX
Enis
źródło
3
Działało to dla mnie, o ile dodałem również kolejną linię w sbtconfig.txt z równoważnymi właściwościami https . Użyłem dokładnie tych samych wartości, co dla odpowiednich właściwości http. Zatem: -Dhttps.proxyHost = PROXYHOST -Dhttps.proxyPort = PROXYPORT -Dhttps.proxyUser = NAZWA UŻYTKOWNIKA -Dhttps.proxyPassword = XXXX
snark
4
WAŻNA UWAGA: już nie działa! Zamiast tego musisz użyć sbt/conf/sbtoptspliku.
saszetka
@ antoine-sac gdzie mogę znaleźć sbt/conf/sbtoptsplik do ustawienia proxy?
krozaine
1
@krozaine w katalogu instalacyjnym sbt - mój był C:\Program Files (x86)\sbt\conf\sbtoptsoczywiście pod - w systemie Windows.
saszetka
@ antoine-sac wydaje mi się, że działa dla mnie bez dotykania sbtoptspliku
enissay
12

Użyłem (to jest środowisko unixowe):

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

To nie zadziałało w mojej konfiguracji:

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

W pliku sbt.sh:

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

Ale najwyraźniej SBT_OPTS jest używany zamiast JAVA_OPTS

niebieskie niebo
źródło
Nie mogę znaleźć w Internecie miejsca, w którym powinienem umieścić sbt.shplik w moim projekcie!
hadilq
Zmienna SBT_OPTS ENV była jedyną rzeczą, która sprawiła, że ​​działała dla mnie na CentOS
Icarus
9

W przypadku użytkowników systemu Windows wprowadź następujące polecenie:

set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080
rphonika
źródło
3
W moim przypadku musiałem również dodać ustawienia dla https ... codeset JAVA_OPTS = -Dhttp.proxySet = true -Dhttp.proxyHost = <Serwer proxy> -Dhttp.proxyPort = <Port> -Dhttp.proxyUser = <Username> - Dht tp.proxyPassword = <hasło> -Dhttps.proxySet = true -Dhttps.proxyHost = <Serwer proxy> -Dhttps.proxyPort = <Port> -Dhttps.proxyUser = <nazwa użytkownika> -Dhttp s.proxyHost = <hasło>code
Arun
6

Aby udzielić jednej odpowiedzi, która będzie działać dla wszystkich użytkowników systemu Windows:

Dodaj następujące elementy do pliku 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

Zastąp oba XXXXXXX swoim proxyHost, a oba YYYY swoim proxyPort.

Jeśli pojawi się błąd „Nie można znaleźć lub załadować głównej klasy”, musisz ustawić JAVA_HOME:

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

W przypadku 64-bitowych okien użyj:

Progra ~ 1 = „Pliki programów”

Progra ~ 2 = „Pliki programów (x86)”

JayL
źródło
4

Dodaj konfigurację http i 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"

(konfiguracja https jest konieczna, ponieważ wiele adresów URL odwoływanych przez biblioteki SBT to https)

W rzeczywistości, nawet dodatkowy ustawienie 'http.proxySet'do 'true'obu wpisów konfiguracyjnych.

Parasouramane D.
źródło
3

Kiedy dodałem informacje o serwerze proxy do% JAVA_OPTS%, pojawił się błąd „-Dhttp.proxyHost = Twój serwer był w tym czasie nieoczekiwany”. Umieściłem informacje o serwerze proxy w% SBT_OPTS% i zadziałało.

craigpfeifer
źródło
6
W systemie Windows miałem ten sam błąd, ale ustawienie SBT_OPTS poprawiło błąd, ale nie ustawiło proxy. Rozwiązaniem było ustawienie JAVA_OPTS lub SBT_OPTS, ale bez cudzysłowów wokół wartości.
pgras
2

Za pomocą

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

działa w Ubuntu 15.10 x86_64 x86_64 GNU / Linux.

Zastąp yourServer odpowiednim adresem bez prefiksów http: // ani https: // odpowiednio w językach Dhttp i Dhttps. Pamiętaj, aby unikać cudzysłowów. Żadne usr / pass nie jest zawarte w linii kodu, wystarczy dodać -Dhttp.proxyUser = usr -Dhttp.proxyPassword = pass z tymi samymi kryteriami typowania. Dzięki @Jacek Laskowski !. Twoje zdrowie

user278049
źródło
nigdzie nie ma czystej linii poleceń do szybkiego kopiowania i wklejania, tylko ten @mad facet!
user278049
2

Znalazłem przydatny element w sekcji FAQ w Lightbend Activator. Używam Activatora, który z kolei używa SBT, więc nie jestem pewien, czy to pomaga użytkownikom tylko z SBT, ale jeśli używasz Activator, tak jak ja, i jesteś za proxy, postępuj zgodnie z instrukcjami w sekcji „Behind A Proxy” w FAQ:

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

Na wypadek gdyby treść zniknęła, oto kopia i wklej:

Podczas uruchamiania aktywatora za proxy wymagana jest dodatkowa konfiguracja. Najpierw otwórz plik konfiguracyjny aktywatora znajdujący się w katalogu domowym użytkownika w katalogu ~ / .activator / activatorconfig.txt. Zauważ, że ten plik może nie istnieć. Dodaj następujące wiersze (po jednej opcji w każdym wierszu):

-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áč
źródło
2

SBT używają zarówno HTTP / HTTPS / SFTP / SSH, jak i innego rodzaju połączeń z repozytorium. więc kiedy za proxy, te protokoły powinny być dostępne.

W większości prostych przypadków w systemie Windows wystarczy przekazać JVM opcje parametrów proxy, takie jak:

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

To wystarczy.

Ale jeśli nie, jest kilka rzeczy, o których powinieneś wiedzieć:

  1. czy nawiązujesz połączenie HTTPS z repozytorium.
  2. czy certyfikaty serwera zostały zaimportowane do jre cacerts
  3. czy Twój serwer proxy zastąpi certyfikaty Twojego serwera

aby rozwiązać najpierw, należy przekazać parametr proxy https do jvm, na przykład:

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

aby rozwiązać drugi, należy zaimportować ok. wskazówek jest wiele.

aby rozwiązać trzeci, być może warto rozważyć użycie proxy uwierzytelniania.

aby uprościć konfigurację SBT, dostarcza sbtconfig.txt i sbtops w katalogu conf, zajrzyj do tego.

Źródła:
http://www.scala-sbt.org/0.13/docs/Setup-Notes.html
http://www.scala-sbt.org/1.0/docs/Publishing.html

Jin Wang
źródło
jaki rodzaj komunikatu o błędzie otrzymujesz, gdy występuje problem z certyfikatem? Kiedy używam właściwości http, otrzymuję wyraźny komunikat, że prawdopodobnie jestem za serwerem proxy itp. Kiedy przełączam się na właściwości httpS, nie mam już wiadomości, więc zakładam, że jest lepiej ... ale pojawiają się problemy jak opisano tutaj: stackoverflow.com/questions/43464585/…
Vincent F
1

W systemie Mac OS X / El Capitan możesz ustawić zmienne środowiskowe Java:

$launchctl setenv _JAVA_OPTIONS "-Dhttp.proxyHost=192.168.1.54 -Dhttp.proxyPort=9999"
Adrian
źródło
1

Odkryłem, że uruchomienie IntelliJ IDEA z poziomu terminala pozwoliło mi połączyć się i pobrać przez Internet. Aby rozpocząć od terminala, wpisz:

$ idea

krozaina
źródło
0

Jeśli korzystasz z Proxy, które wymaga uwierzytelnienia, mam dla Ciebie rozwiązanie :)

Jak wyjaśnił @Faiz powyżej, SBT bardzo ciężko radzi sobie z serwerem proxy wymagającym uwierzytelnienia. Rozwiązaniem jest ominięcie tego uwierzytelniania, jeśli nie możesz wyłączyć serwera proxy na żądanie (na przykład korporacyjny serwer proxy). Aby to zrobić, sugeruję użycie serwera proxy squid i skonfigurowanie go przy użyciu nazwy użytkownika i hasła, aby uzyskać dostęp do korporacyjnego serwera proxy. Zobacz: https://doc.ubuntu-fr.org/squid Następnie możesz ustawić zmienne środowiskowe JAVA_OPTS lub SBT_OPTS tak, aby SBT łączyło się z Twoim lokalnym proxy squid zamiast z korporacyjnym proxy:

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

(po prostu c / c to w swoim bashrc bez modyfikowania czegokolwiek i powinno działać dobrze).

Sztuczka polega na tym, że Squid Proxy nie wymaga żadnego uwierzytelnienia i działa jako pośrednik między SBT a innym serwerem proxy.

Jeśli masz kłopoty ze stosowaniem tej rady, daj mi znać.

Pozdrowienia,

Edgar

Edgar L.
źródło
0

Dla tych, którzy wciąż lądują w tym wątku, próbując znaleźć, gdzie / jak skonfigurować serwer proxy HTTP w IntelliJ, oto jak udało mi się go uruchomić. Mam nadzieję, że to pomoże!

(Uwaga: w odpowiednich polach podaj swoją nazwę użytkownika i hasło sieciowe): -

wprowadź opis obrazu tutaj

Deej
źródło
0

Spróbuj podać szczegóły serwera proxy jako parametry

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

Jeśli to nie działa, spróbuj z JAVA_OPTS (bez systemu Windows)

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

sbt compile

lub (Windows)

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

jeśli nic nie działa, ustaw SBT_OPTS

(bez okien)

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

lub (Windows)

set SBT_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"
sbt compile
Manjunath G.
źródło