ProgramingTip

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

bestdevel 2020. 10. 4. 12:03
반응형

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


프록시를 사용하도록 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'할 수있는 작은 펼쳐보기 설정하는 문제집합니다.

Gotchas

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

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(위에 언어) 다른 사람의 사이에. 자바 및 프록시를 참조하십시오 .

일부 펼쳐는 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 사용에 대한 프록시를 설정하기 위해 거의 모두 요약됩니다.


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

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

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가 사용됩니다.


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

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

모든 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'모두 구성 항목입니다.


% JAVA_OPTS %에 프록시 정보를 추가했을 때 "-Dhttp.proxyHost = yourserver가 현재 오류 메시지"라는 오류가 발생했습니다. 프록시 정보를 % SBT_OPTS %에 입력 제대로 작동했습니다.


사용

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

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

yourServer를 Dhttp 및 Dhttps에 각각 http : // 또는 https : // 접두사없이 적절한 주소로 바꿉니다. 따옴표는 피하십시오. 코드 라인에 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

그렇게 할 것입니다.

그러나없는 경우에는 할 몇 가지 사항이 있습니다.

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

먼저 결제해야하는 다음과 같이 https 프록시해야하는 변수를 전달합니다.

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


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

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

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

$ idea


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

@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와 다른 프록시 사이의 중간 역할을한다는 것입니다.

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

문안 인사,

에드가


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

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

여기에 이미지 설명 입력


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

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

참고 URL : https://stackoverflow.com/questions/13803459/how-to-use-sbt-from-behind-proxy

반응형