Sbt proxy arkasında nasıl kullanılır?


85

Sbt'yi bir proxy kullanmak üzere nasıl yapılandırırım?

Örneğin, benim yapı tanımı için bağlantı parametrelerini belirterek, GitHub'dan bağlanması gerekmesine http.proxy, http.proxyPort, uservepassword .

Bu ayarları sbt'ye nasıl geçiririm?

Evden çalıştığımda proxy / proxy'siz ayarları arasında geçiş yapmanın kolay bir yolu var mı?

Yanıtlar:


135

sbt http proxy ayarları için olağan ortam değişkenlerine saygı duyar:

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

( Tabii ki, Unix varsayarsak (Linux / OSX vb.). Windows'ta aynı ortam değişkenini ( %JAVA_OPTS%) her zamanki gibi Windows yolunda ayarlayabilirsiniz . )

Ardından sbther zamanki gibi çalıştırın :

sbt

Proxy / proxy'siz arasında geçiş yapmak, ihtiyaç duyduğunuzda 'slurp' yapabileceğiniz küçük bir komut dosyası oluşturmakla ilgili olmalıdır.

Gotchas

  • İn: "// http" dahil etmeyin yourserverdeğeri
  • Bağlantı noktasını yourserverdeğere dahil etmeyin
  • Muhtemelen dahil etmek istersiniz https.proxyHostve https.proxyPortbirçok şey https üzerinden çalışır.
  • Proxy'niz kimlik doğrulaması gerektiriyorsa, SBT başka hiçbir şeyi desteklemediğinden, Temel Kimlik Doğrulamayı kullanmadığı sürece denemekten bile çekinmeyin. Ayrıca her zaman ortam değişkenlerine açık mesajlaşma kimlik bilgilerine dikkat edin! İzleme dosyalarını oluşturmayacak bir metin düzenleme yöntemi kullanarak komutları .bash_history'den kaldırdığınızdan emin olun (teknik olarak yapmanız gerekir shredveya srmdosyanın tamamı). Windows kullanıyorsanız, endişelenmeyin, güvenliğiniz zaten alt üst olmuş durumda, daha fazla zarar veremezsiniz.

1
Teşekkürler, bu doğru cevap. Görünüşe göre asıl sorunum proxyimin GIT tarafından kullanılan bağlantı noktalarını engellemesi, bu nedenle http protokolünü kullanmam gerekiyor.
supyo

4
+1 Ancak, Windows 7'de bunu çalıştırmak için Komut İstemi'nden kullanmak set JAVA_OPTS=-Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=passwordzorunda kaldım.
HeatfanJohn

4
Benim için çalışmıyor, "Proxy'niz kimlik doğrulaması gerektiriyor" mesajı almaya devam ediyorum ve dl deps başarısız oluyor. Eski bir
NTLM'nin

6
Bunu çözdükten sonra - benim durumumda HTTPS java sistem parametresini -Dhttps.proxyHost ve -Dhttps.proxyPort!
Conny Kreyßel

1
Eski bir NTLM'nin arkasındaysanız, CNTLM kullanmanızı tavsiye ederim, benim için işe yarıyor
Elouan Keryell

25

sbt diğer JVM tabanlı projelerin genellikle yapılandırılma şekline kıyasla oldukça standart bir şekilde çalışır.

sbt aslında iki "alt sistemdir" - başlatıcı ve çekirdek. Genellikle xsbt.boot.Bootçekirdek, hepimizin bildiği (ve hatta bazılarının hoşlandığı) özelliklerle başlamadan önce yürütülür.

Bu nedenle, HTTP, HTTPS ve FTP ağ trafiği için bir proxy'yi nasıl ayarlayabileceğinizi söyleyen sbt'yi nasıl yürüteceğinizle ilgili bir mesele.

Aşağıda, Java API'sine iletişimi bir proxy aracılığıyla yönlendirmesi talimatını veren, sbt dahil olmak üzere herhangi bir Java uygulaması için ayarlanabilen mevcut özelliklerin tam listesi verilmiştir:

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

httpYukarıdakileri httpsve ile değiştirinftpHizmetlerin özelliklerinin listesini almak için .

Bazı sbtkomut kullanmak JAVA_OPTSile proxy ayarlarını kurmak -Dhttp.proxyHostve -Dhttp.proxyPort(yukarıda listelenen) diğerleri arasında. Java Ağı ve Proxy'leri görün .

Bazı komut dosyaları, SBT_OPTSözelliği kullanarak .sbtoptsveya (yalnızca Windows'ta) proxy yapılandırmasını kurmanın kendi yöntemleriyle gelir%SBT_HOME%\conf\sbtconfig.txt . Diğer JVM tabanlı uygulamalar etkilenmezken, sbt'yi proxy'leri kullanacak şekilde özel olarak ayarlamak için bunları kullanabilirsiniz.

Gönderen sbtkomut satırı aracı:

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

Ve işte bir alıntı geliyor 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.

Yalnızcasbtconfig.txt Windows'ta çalıştığına dikkat edin . Dosyayı kullandığınızda danışılmaz ve diğer yaklaşımları kullanmak zorunda kalacaksınız.cygwin

Aşağıdaki komut dosyasıyla sbt kullanıyorum:

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

Komut dosyasının amacı, JVM özelliklerini JVM sbt kullanımlarına aktarmanın bir yolu olarak kaynaklardan (bu yüzden kullanıyorum /Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar) sbt'nin en son sürümünü $SBT_OPTSkullanmaktır.

Yukarıdaki komut dosyası, MacOS X'te komut satırında aşağıdaki gibi proxy ayarlamamı sağlıyor:

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

Gördüğünüz gibi, sbt için vekil sunucu ayarlamak için pek çok yaklaşım vardır ve bunların hepsi JVM sbt kullanımları için bir vekil sunucu ayarlamak için hemen hemen kaynar.


13

Windows ortamında sbt / sbtconfig.txt dosyasına aşağıdaki satırı ekleyin

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

veya Https eşdeğeri (yorumlar sayesinde)

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

3
Bu, sbtconfig.txt dosyasına https eşdeğer özellikleriyle başka bir satır eklediğim sürece benim için çalıştı . Karşılık gelen http özellikleriyle tamamen aynı değerleri kullandım. Böylece: -Dhttps.proxyHost = proxyhost -Dhttps.proxyPort = proxyport -Dhttps.proxyUser = ADI -Dhttps.proxyPassword = XXXX
snark

5
ÖNEMLİ NOT: artık çalışmıyor! Bunun sbt/conf/sbtoptsyerine dosyayı kullanmalısınız.
asachet

@ antoine-sac sbt/conf/sbtoptsproxy ayarlamak için dosyayı nerede bulabilirim ?
krozaine

1
@krozaine sbt kurulum dizininde - benimki C:\Program Files (x86)\sbt\conf\sbtoptsaçıkçası pencerelerin altındaydı .
asachet

@ antoine-sac sbtoptsdosyaya dokunmadan benim için çalışıyor gibi görünüyor
enissay

12

Kullandım (bu bir unix ortamı):

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

Bu benim kurulumum için işe yaramadı:

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

Sbt.sh dosyasında:

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

Ama görünüşe göre JAVA_OPTS yerine SBT_OPTS kullanılıyor


sbt.shDosyayı projemde nereye koymam gerektiğini internette bulamıyorum !
hadilq

SBT_OPTS ENV değişkeni, benim için CentOS'ta çalışmasını sağlayan tek şeydi
Icarus

9

Windows kullanıcıları için aşağıdaki komutu girin:

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

3
Benim durumumda https için de ayarlar eklemek zorunda kaldım ... codeJAVA_OPTS = -Dhttp.proxySet = true -Dhttp.proxyHost = <Proxy Sunucusu> -Dhttp.proxyPort = <Port> -Dhttp.proxyUser = <Username> ayarla - Dht tp.proxyPassword = <Password> -Dhttps.proxySet = true -Dhttps.proxyHost = <Proxy Sunucusu> -Dhttps.proxyPort = <Port> -Dhttps.proxyUser = <Username> -Dhttp s.proxyPassword = <Password>code
Arun

6

Tüm Windows kullanıcıları için işe yarayacak tek bir yanıt sağlamak için:

Aşağıdakileri sbtconfig.txt dosyanıza ekleyin (C: \ Program Files (x86) \ sbt \ conf)

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

Her iki değiştirin XXXXXXX sizin proxyhost ile ve her iki YYYY sizin proxyport ile.

"Ana sınıf bulunamadı veya yüklenemedi" hatasını alırsanız, JAVA_HOME'u ayarlamanız gerekir:

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

64 bit pencerelerde, şunu kullanın:

Progra ~ 1 = 'Program Dosyaları'

Progra ~ 2 = 'Program Dosyaları (x86)'


4

Hem http hem de https yapılandırmasını ekleyin:

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"

(sbt kitaplıkları tarafından yönlendirilen birçok url https olduğundan, https yapılandırması zorunludur)

Aslında, ben bile ekstra bir ayar vardı 'http.proxySet'için 'true'her iki yapılandırma girişlerinde.


3

% JAVA_OPTS% 'ye proxy bilgisini eklediğimde, "-Dhttp.proxyHost = sunucunuz şu anda beklenmedikti" hatası alıyorum. Proxy bilgilerini% SBT_OPTS% içine koydum ve işe yaradı.


6
Windows'ta aynı hatayı aldım, ancak SBT_OPTS'nin ayarlanması hatayı düzeltti ancak proxy'yi ayarlamadı. Çözüm, JAVA_OPTS veya SBT_OPTS'yi, ancak değerin etrafında tırnaklar olmadan ayarlamaktı.
pgras

2

Kullanma

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

Ubuntu 15.10 x86_64 x86_64 GNU / Linux'ta çalışır.

Sunucunuzu, sırasıyla Dhttp ve Dhttps'de http: // veya https: // önekleri olmadan uygun adresle değiştirin. Tırnak işaretlerinden kaçınmayı unutmayın. -Dhttp.proxyUser = usr -Dhttp.proxyPassword = aynı yazım kriteriyle geçişi eklemek için kod satırına hiçbir usr / pass dahil edilmez. Teşekkürler @Jacek Laskowski !. Şerefe


hiçbir yerde hızlı kopyalayıp yapıştırmak için temiz komut satırı yok, sadece şu @mad adam!
user278049

2

Lightbend Activator'ın SSS bölümünde yararlı bir öğe buldum. Sırasıyla SBT kullanan Aktivatör kullanıyorum, bu nedenle bunun yalnızca SBT ile kullanıcılara yardımcı olup olmadığından emin değilim, ancak benim gibi Aktivatör kullanıyorsanız ve bir proxy'nin arkasındaysanız, "Proxy Arkasında" bölümündeki talimatları izleyin. SSS:

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

İçeriğin kaybolması ihtimaline karşı, işte bir kopyalayıp yapıştırın:

Aktivatörü bir proxy arkasında çalıştırırken, bazı ek konfigürasyonlara ihtiyaç vardır. İlk olarak, ~ / .activator / activatorconfig.txt altında kullanıcı ana dizininizde bulunan aktivatör yapılandırma dosyasını açın. Bu dosyanın mevcut olmayabileceğini unutmayın. Aşağıdaki satırları ekleyin (satır başına bir seçenek):

-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, hem HTTP / HTTPS / SFTP / SSH'yi hem de bir depoya yapılan diğer bağlantı türlerini kullanır. bu nedenle bir proxy'nin arkasında olduğunda, bu protokoller mevcut olmalıdır.

Windows'taki çoğu basit durumda, proxy parametreleri seçeneklerini JVM'ye iletmeniz yeterlidir, örneğin:

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

Bu yeterli.

Ancak değilse, bilmeniz gereken birkaç şey var:

  1. Depoya HTTPS bağlantısı yapıp yapmadığınız.
  2. sunucu sertifikalarının jre cacerts'a aktarılıp aktarılmadığı
  3. proxy'nizin sunucu sertifikalarınızın yerini alıp almayacağı

Önce çözmek için, https proxy parametresini jvm'ye iletmelisiniz, örneğin:

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

ikinciyi çözmek için ca. birçok ipucu var.

Üçüncüyü çözmek için, bir kimlik doğrulama proxy'si kullanmayı düşünebilirsiniz.

SBT'nin yapılandırmasını basitleştirmek için, conf dizininde sbtconfig.txt ve sbtops sağlar, içine bakın.

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


bir sertifika sorunu olduğunda ne tür bir hata mesajı alıyorsunuz? Http özelliklerini kullandığımda, muhtemelen bir proxy arkasında olduğumu vb. Belirten net bir mesaj alıyorum. HttpS özelliklerine geçiş yaptığımda artık mesajım yok, bu yüzden daha iyi olduğunu varsayıyorum ... ama sorunlar alıyorum burada açıklandığı gibi: stackoverflow.com/questions/43464585/…
Vincent F

1

Mac OS X / El Capitan'da java ortam değişkenlerini ayarlayabilirsiniz:

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

1

IntelliJ IDEA'yı terminalden başlatmanın internet üzerinden bağlanıp indirmeme izin verdiğini öğrendim. Terminalden başlamak için şunu yazın:

$ idea


0

Kimlik doğrulama gerektiren bir Proxy kullanıyorsanız, sizin için bir çözümüm var :)

@Faiz'in yukarıda açıkladığı gibi, SBT'nin kimlik doğrulaması gerektiren çok zor zaman yönetimi vardır. Çözüm, proxy'nizi talep üzerine kapatamazsanız (örneğin kurumsal proxy) bu kimlik doğrulamasını atlamaktır. Bunu yapmak için, bir squid proxy kullanmanızı ve kurumsal proxy'nize erişmek için kullanıcı adınız ve şifrenizle yapılandırmanızı öneririm. Bakınız: https://doc.ubuntu-fr.org/squid Ardından, SBT'nin kurumsal proxy'niz yerine kendi yerel squid proxy'nize bağlanması için JAVA_OPTS veya SBT_OPTS ortam değişkenlerini ayarlayabilirsiniz:

dışa aktar JAVA_OPTS = "-Dhttps.proxyHost = localhost -Dhttps.proxyPort = 3128 -Dhttp.proxyHost = localhost -Dhttp.proxyPort = 3128"

(bashrc'nizde hiçbir şeyi değiştirmeden sadece c / c ve iyi çalışması gerekir).

İşin püf noktası, Squid Proxy'nin herhangi bir kimlik doğrulama gerektirmemesi ve SBT ile diğer proxy'niz arasında bir aracı görevi görmesidir.

Bu tavsiyeyi uygularken sorun yaşarsanız, lütfen bana bildirin.

Saygılarımızla,

Edgar


0

IntelliJ'de HTTP proxy'yi nerede / nasıl yapılandıracağımı bulmaya çalışan bu konuya iniş yapanlar için, işte benim için çalışmasını nasıl başardım. Umarım bu yardımcı olur!

(Not: ilgili kutularda ağ kullanıcı adınızı ve şifrenizi belirtin): -

görüntü açıklamasını buraya girin


0

Proxy ayrıntılarını parametre olarak sağlamayı deneyin

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

Bu çalışmıyorsa, JAVA_OPTS (Windows olmayanlar) ile deneyin

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

sbt compile

veya (windows)

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

hiçbir şey işe yaramazsa SBT_OPTS ayarlayın

(penceresiz)

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

veya (windows)

set SBT_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"
sbt compile
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.