프록시 뒤에서 sbt를 사용하는 방법은 무엇입니까?


85

프록시를 사용하도록 sbt를 구성하려면 어떻게합니까?

예를 들어, 내 빌드 정의의 요구에 대한 연결 매개 변수를 지정, GitHub의에 연결하는 http.proxy, http.proxyPort, user,와 password.

이 설정을 sbt에 어떻게 전달합니까?

집에서 일할 때 프록시 / 비 프록시 설정간에 쉽게 전환 할 수있는 방법이 있습니까?

답변:


135

sbt http 프록시 설정에 대한 일반적인 환경 변수를 존중합니다.

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

( 물론 Unix (Linux / OSX 등)를 가정 %JAVA_OPTS%합니다. Windows에서는 Windows 방식으로 평소 와 동일한 환경 변수 ( )를 설정할 수 있습니다 . )

그런 다음 sbt평소처럼 실행 합니다.

sbt

프록시 / 비 프록시 간 전환은 필요할 때마다 'slurp'할 수있는 작은 스크립트를 설정하는 문제 여야합니다.

Gotchas

  • yourserver값 에 "http : //"를 포함하지 마십시오.
  • yourserver값에 포트를 포함하지 마십시오.
  • https를 통해 많은 항목이 작동하므로 포함 https.proxyHost하고 싶을 수도 있습니다.https.proxyPort
  • 프록시에 인증이 필요한 경우 SBT가 다른 것을 지원하지 않으므로 기본 인증을 사용하지 않는 한 시도조차하지 마십시오. 또한 항상 환경 변수에 대한 명확한 텍스트 자격 증명을주의하십시오! 추적 파일을 만들지 않는 텍스트 편집 방법을 사용하여 .bash_history에서 명령을 제거해야합니다 (기술적으로 shred또는 srm전체 파일). Windows를 사용하는 경우 걱정하지 마십시오. 보안이 이미 엉망이되어 더 이상 해를 끼칠 수 없습니다.

1
감사합니다. 정답입니다. 내 진짜 문제는 내 프록시가 GIT에서 사용하는 포트를 차단하므로 http 프로토콜을 사용해야한다는 것입니다.
supyo dec

4
+1 그러나 Windows 7에서는 명령 프롬프트 set JAVA_OPTS=-Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password에서이 작업을 수행하는 데 사용해야 했습니다.
HeatfanJohn

4
나를 위해 작동하지 않습니다. "당신의 프록시에 인증이 필요합니다"라는 메시지가 계속 표시되고 dl deps에 실패합니다. 나는 레거시 NTLM 뒤에 있습니다 :(
samthebest 2014 년

6
나는 그것을 알아낼 후 - 내 경우에는 내가 HTTPS 자바 시스템 매개 변수를 사용해야합니다 것을 깨달았다 -Dhttps.proxyHost -Dhttps.proxyPort!
Conny Kreyßel 2015

1
경우 레거시 NTLM 뒤에, 나는 CNTLM를 사용하여 운영자 추천, 그것은 나를 위해 작동
Elouan Keryell-에도

25

sbt 다른 JVM 기반 프로젝트가 일반적으로 구성되는 방식과 비교하여 상당히 표준적인 방식으로 작동합니다.

sbt는 실제로 런처와 코어의 두 "하위 시스템"입니다. 일반적으로 xsbt.boot.Boot코어가 우리 모두가 알고있는 (그리고 일부는 좋아하는) 기능으로 시작되기 전에 실행됩니다.

따라서 HTTP, HTTPS 및 FTP 네트워크 트래픽에 대한 프록시를 설정하는 방법은 sbt를 실행하는 방법의 문제입니다.

다음은 프록시를 통해 통신을 라우팅하도록 Java API에 지시하는 모든 Java 애플리케이션 (sbt 포함)에 대해 설정할 수있는 사용 가능한 특성의 전체 목록입니다.

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

교체 http위에서 httpsftp서비스에 대한 등록 정보의 목록을 얻을 수 있습니다.

일부 sbt스크립트를 사용 JAVA_OPTS하여 프록시 설정을 설정 -Dhttp.proxyHost하고 -Dhttp.proxyPort(위에 나열된) 다른 사람의 사이에. Java 네트워킹 및 프록시를 참조하십시오 .

일부 스크립트는 SBT_OPTS속성을 사용하여 프록시 구성을 설정하는 고유 한 방법 .sbtopts또는 (Windows에서만) 제공 %SBT_HOME%\conf\sbtconfig.txt됩니다. 다른 JVM 기반 응용 프로그램은 전혀 영향을받지 않는 동안 프록시를 사용하도록 sbt를 특별히 설정하는 데 사용할 수 있습니다.

로부터 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)

다음에서 발췌 한 내용이 있습니다 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.

sbtconfig.txtWindows 에서만 작동하므로 주의하십시오 . cygwin파일 을 사용할 때 참조되지 않으며 다른 접근 방식 을 사용해야 합니다.

다음 스크립트와 함께 sbt를 사용하고 있습니다.

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

스크립트의 요점은 JVM 속성을 JVM sbt 사용에 전달하는 수단 /Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar으로 $SBT_OPTS속성과 함께 소스에서 빌드 된 sbt의 최신 버전을 사용하는 것입니다.

위의 스크립트를 사용하면 MacOS X의 명령 줄에서 다음과 같이 프록시를 설정할 수 있습니다.

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

보시다시피 sbt에 대한 프록시를 설정하는 많은 접근 방식이 있으며 JVM sbt가 사용하는 프록시를 설정하기 위해 거의 모두 요약됩니다.


13

Windows 환경에서는 sbt / sbtconfig.txt에 다음 줄을 추가하면됩니다.

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

또는 Https에 상응하는 것 (댓글 덕분에)

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

3
https 와 동등한 속성을 사용하여 sbtconfig.txt에 다른 줄을 추가하는 한 이것은 나를 위해 일했습니다 . 해당 http 속성과 똑같은 값을 사용했습니다. 따라서 : -Dhttps.proxyHost = PROXYHOST -Dhttps.proxyPort = PROXYPORT -Dhttps.proxyUser = USERNAME -Dhttps.proxyPassword = XXXX
snark

4
중요 참고 : 더 이상 작동하지 않습니다! sbt/conf/sbtopts대신 파일 을 사용해야합니다 .
asachet

@ antoine-sac sbt/conf/sbtopts프록시를 설정할 파일을 어디에서 찾을 수 있습니까?
krozaine

1
sbt 설치 디렉토리의 @krozaine-내 것이 C:\Program Files (x86)\sbt\conf\sbtopts창 아래에 있음 -분명히.
asachet

그것은 건드리지 않고 나를 위해 작동하는 것 같다 @ 앙투안 골목 sbtopts파일을
enissay

12

나는 사용했다 (이것은 유닉스 환경이다) :

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

이것은 내 설정에서 작동하지 않았습니다.

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

sbt.sh 파일에서 :

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

그러나 분명히 JAVA_OPTS 대신 SBT_OPTS가 사용됩니다.


sbt.sh프로젝트 에서 파일을 어디에 넣어야하는지 인터넷에서 찾을 수 없습니다 !
hadilq

SBT_OPTS ENV 변수는 CentOS는 나를 위해 작동되는 유일한 일이었다
이카루스

9

Windows 사용자의 경우 다음 명령을 입력하십시오.

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

3
제 경우에는 https에 대한 설정도 추가해야했습니다 ... codeset JAVA_OPTS = -Dhttp.proxySet = true -Dhttp.proxyHost = <Proxy Server> -Dhttp.proxyPort = <Port> -Dhttp.proxyUser = <Username>- Dht tp.proxyPassword = <비밀번호> -Dhttps.proxySet = true -Dhttps.proxyHost = <프록시 서버> -Dhttps.proxyPort = <포트> -Dhttps.proxyUser = <사용자 이름> -Dhttp s.proxyPassword = <비밀번호>code
Arun

6

모든 Windows 사용자에게 적합한 하나의 답변을 제공하려면 :

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

모두 교체 XXXXXXX 당신의 proxyHost와, 두 YYYY 당신의 프락시 포트에 있습니다.

"기본 클래스를 찾거나로드 할 수 없습니다"라는 오류가 발생하면 JAVA_HOME을 설정해야합니다.

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

64 비트 창에서는 다음을 사용하십시오.

Progra ~ 1 = '프로그램 파일'

Progra ~ 2 = '프로그램 파일 (x86)'


4

http 및 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"

(sbt 라이브러리에서 참조하는 많은 URL이 https이므로 https 구성은 필수입니다)

사실, 난 여분의 설정을 가지고 'http.proxySet''true'모두 구성 항목입니다.


3

% JAVA_OPTS %에 프록시 정보를 추가 할 때 "-Dhttp.proxyHost = yourserver가 현재 예기치 않았습니다"라는 오류가 발생했습니다. 프록시 정보를 % SBT_OPTS %에 입력했는데 제대로 작동했습니다.


6
Windows에서 동일한 오류가 발생했지만 SBT_OPTS를 설정하면 오류가 수정되었지만 프록시는 설정되지 않았습니다. 해결책은 JAVA_OPTS 또는 SBT_OPTS를 설정하는 것이었지만 값을 따옴표로 묶지 않았습니다.
pgras

2

사용

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

Ubuntu 15.10 x86_64 x86_64 GNU / Linux에서 작동합니다.

Dhttp 및 Dhttps에 각각 http : // 또는 https : // 접두사가없는 적절한 주소로 yourServer를 바꿉니다. 따옴표는 피하십시오. 코드 라인에 usr / pass가 포함되어 있지 않으므로 동일한 입력 기준으로 -Dhttp.proxyUser = usr -Dhttp.proxyPassword = pass 만 추가하면됩니다. 감사합니다 @Jacek Laskowski !. 건배


빠른 복사 및 붙여 넣기를위한 깔끔한 명령 줄이 아닙니다. @mad 녀석뿐입니다!
user278049

2

Lightbend Activator의 FAQ 섹션에서 유용한 항목을 찾았습니다. 나는 차례로 SBT를 사용하는 Activator를 사용하고 있습니다. 따라서 이것이 SBT만으로 사용자에게 도움이되는지 확실하지 않지만, 나와 같은 Activator를 사용하고 프록시 뒤에있는 경우 "Behind A Proxy"섹션의 지침을 따르십시오. 자주하는 질문:

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

내용이 사라지는 경우를 대비하여 다음은 복사-붙여 넣기입니다.

프록시 뒤에서 활성기를 실행할 때 몇 가지 추가 구성이 필요합니다. 먼저 ~ / .activator / activatorconfig.txt 아래의 사용자 홈 디렉토리에있는 활성기 구성 파일을 엽니 다. 이 파일이 존재하지 않을 수 있습니다. 다음 줄을 추가합니다 (한 줄에 하나의 옵션).

-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는 HTTP / HTTPS / SFTP / SSH 및 다른 종류의 저장소 연결을 모두 사용합니다. 따라서 프록시 뒤에있는 경우 이러한 프로토콜을 사용할 수 있어야합니다.

Windows에서 가장 간단한 경우에는 다음과 같이 프록시 매개 변수 옵션을 JVM에 전달하기 만하면됩니다.

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

그렇게 할 것입니다.

그러나 그렇지 않은 경우 알아야 할 몇 가지 사항이 있습니다.

  1. 저장소에 HTTPS 연결을 설정하는지 여부.
  2. 서버 인증서를 jre cacerts로 가져 왔는지 여부
  3. 프록시가 서버 인증서를 대체할지 여부

먼저 해결하려면 다음과 같이 https 프록시 매개 변수를 jvm에 전달해야합니다.

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

두 번째 문제를 해결하려면 ca. 많은 팁이 있습니다.

세 번째 문제를 해결하기 위해 인증 프록시 사용을 고려할 수 있습니다.

SBT의 구성을 단순화하기 위해 conf 디렉토리에 sbtconfig.txt 및 sbtops를 제공합니다.

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


인증서 문제 일 때 어떤 종류의 오류 메시지가 표시됩니까? http 속성을 사용할 때 프록시 뒤에있을 가능성이 있다는 명확한 메시지가 표시됩니다. httpS 속성으로 전환하면 더 이상 메시지가 표시되지 않으므로 더 나은 것으로 생각하지만 문제가 발생합니다. 여기에 설명 된대로 : stackoverflow.com/questions/43464585/…
Vincent F

1

Mac OS X / El Capitan에서는 Java 환경 변수를 설정할 수 있습니다.

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

1

터미널에서 IntelliJ IDEA를 시작하면 인터넷을 통해 연결하고 다운로드 할 수 있습니다. 터미널에서 시작하려면 다음을 입력하십시오.

$ idea


0

인증이 필요한 프록시를 사용하는 경우 솔루션이 있습니다. :)

@Faiz가 위에서 설명한 것처럼 SBT는 인증이 필요한 프록시를 처리하는 데 매우 어려움을 겪습니다. 해결책은 요청시 프록시 (예 : 회사 프록시)를 끌 수없는 경우이 인증을 우회하는 것입니다. 이렇게하려면 squid 프록시를 사용하고 회사 프록시에 액세스 할 수 있도록 사용자 이름과 암호로 구성하는 것이 좋습니다. 참조 : https://doc.ubuntu-fr.org/squid 그런 다음 JAVA_OPTS 또는 SBT_OPTS 환경 변수를 설정하여 SBT가 회사 프록시 대신 자신의 로컬 squid 프록시에 연결하도록 할 수 있습니다.

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

(아무것도 수정하지 않고 bashrc에서 이것을 c / c하면 잘 작동합니다).

트릭은 Squid 프록시가 인증을 요구하지 않고 SBT와 다른 프록시 사이의 중간 역할을한다는 것입니다.

이 조언을 적용하는 데 문제가 있으면 알려주십시오.

문안 인사,

에드가


0

IntelliJ에서 HTTP 프록시를 구성하는 위치 / 방법을 찾으려고하는이 스레드에 여전히 방문하는 사람들을 위해 여기에 내가 작동하도록 관리하는 방법이 있습니다. 이게 도움이 되길 바란다!

(참고 : 해당 상자에 네트워크 사용자 이름과 암호를 지정하십시오) :-

여기에 이미지 설명 입력


0

프록시 세부 사항을 매개 변수로 제공하십시오.

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

작동하지 않는 경우 JAVA_OPTS (비 Windows)로 시도하십시오.

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

sbt compile

또는 (창)

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

아무것도 작동하지 않으면 SBT_OPTS를 설정하십시오.

(비창)

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

또는 (창)

set SBT_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"
sbt compile
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.