프록시를 사용하도록 sbt를 구성하려면 어떻게합니까?
예를 들어, 내 빌드 정의의 요구에 대한 연결 매개 변수를 지정, GitHub의에 연결하는 http.proxy
, http.proxyPort
, user
,와 password
.
이 설정을 sbt에 어떻게 전달합니까?
집에서 일할 때 프록시 / 비 프록시 설정간에 쉽게 전환 할 수있는 방법이 있습니까?
답변:
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'할 수있는 작은 스크립트를 설정하는 문제 여야합니다.
yourserver
값 에 "http : //"를 포함하지 마십시오.yourserver
값에 포트를 포함하지 마십시오.https.proxyHost
하고 싶을 수도 있습니다.https.proxyPort
shred
또는 srm
전체 파일). Windows를 사용하는 경우 걱정하지 마십시오. 보안이 이미 엉망이되어 더 이상 해를 끼칠 수 없습니다.set JAVA_OPTS=-Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password
에서이 작업을 수행하는 데 사용해야 했습니다.
-Dhttps.proxyHost
와 -Dhttps.proxyPort
!
sbt
다른 JVM 기반 프로젝트가 일반적으로 구성되는 방식과 비교하여 상당히 표준적인 방식으로 작동합니다.
sbt는 실제로 런처와 코어의 두 "하위 시스템"입니다. 일반적으로 xsbt.boot.Boot
코어가 우리 모두가 알고있는 (그리고 일부는 좋아하는) 기능으로 시작되기 전에 실행됩니다.
따라서 HTTP, HTTPS 및 FTP 네트워크 트래픽에 대한 프록시를 설정하는 방법은 sbt를 실행하는 방법의 문제입니다.
다음은 프록시를 통해 통신을 라우팅하도록 Java API에 지시하는 모든 Java 애플리케이션 (sbt 포함)에 대해 설정할 수있는 사용 가능한 특성의 전체 목록입니다.
교체 http
위에서 https
및 ftp
서비스에 대한 등록 정보의 목록을 얻을 수 있습니다.
일부 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.txt
Windows 에서만 작동하므로 주의하십시오 . 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가 사용하는 프록시를 설정하기 위해 거의 모두 요약됩니다.
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
sbt/conf/sbtopts
대신 파일 을 사용해야합니다 .
sbt/conf/sbtopts
프록시를 설정할 파일을 어디에서 찾을 수 있습니까?
C:\Program Files (x86)\sbt\conf\sbtopts
창 아래에 있음 -분명히.
sbtopts
파일을
나는 사용했다 (이것은 유닉스 환경이다) :
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
프로젝트 에서 파일을 어디에 넣어야하는지 인터넷에서 찾을 수 없습니다 !
Windows 사용자의 경우 다음 명령을 입력하십시오.
set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080
code
set 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
모든 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)'
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'
모두 구성 항목입니다.
사용
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 !. 건배
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"
SBT는 HTTP / HTTPS / SFTP / SSH 및 다른 종류의 저장소 연결을 모두 사용합니다. 따라서 프록시 뒤에있는 경우 이러한 프로토콜을 사용할 수 있어야합니다.
Windows에서 가장 간단한 경우에는 다음과 같이 프록시 매개 변수 옵션을 JVM에 전달하기 만하면됩니다.
java -Dhttp.proxyHost=myproxy -Dhttp.proxyPort=8080
그렇게 할 것입니다.
그러나 그렇지 않은 경우 알아야 할 몇 가지 사항이 있습니다.
먼저 해결하려면 다음과 같이 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
인증이 필요한 프록시를 사용하는 경우 솔루션이 있습니다. :)
@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와 다른 프록시 사이의 중간 역할을한다는 것입니다.
이 조언을 적용하는 데 문제가 있으면 알려주십시오.
문안 인사,
에드가
프록시 세부 사항을 매개 변수로 제공하십시오.
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