如何配置sbt以使用代理?
例如,我的构建定义需要连接到GitHub,指定http.proxy
,http.proxyPort
,user
和password
的连接参数。
我如何将这些设置传递给sbt?
当我在家工作时,是否有一种简单的方法可以在代理/无代理设置之间切换?
答案 0 :(得分:127)
sbt
尊重http代理设置的常用环境变量:
export JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password"
(当然,假设是Unix(Linux / OSX等)。在Windows上,您可以像往常一样以Windows方式设置相同的环境变量(%JAVA_OPTS%
)。)< / p>
然后像往常一样运行sbt
:
sbt
在代理/无代理之间切换应该是设置一个小脚本,你可以随时“啜饮”它。
yourserver
和yourserver
,因为很多内容适用于https https.proxyHost
或https.proxyPort
整个文件。如果您使用的是Windows,请不要担心,您的安全性已经搞砸了,您不能再受到任何伤害。答案 1 :(得分:25)
sbt
以相当标准的方式工作。
xsbt.boot.Boot
在核心启动之前执行,我们都知道这些功能(有些甚至更喜欢)。
因此,您应该如何执行sbt,说明如何为HTTP,HTTPS和FTP网络流量设置代理。
以下是可以为任何Java应用程序设置的可用属性的完整列表,包括指示Java API通过代理路由通信的sbt:
将上面的http
替换为https
和ftp
,以获取服务的属性列表。
某些sbt
脚本使用JAVA_OPTS
设置-Dhttp.proxyHost
和-Dhttp.proxyPort
之间的代理设置(如上所列)。请参阅Java Networking and Proxies。
某些脚本使用SBT_OPTS
属性.sbtopts
或(仅限Windows)%SBT_HOME%\conf\sbtconfig.txt
自行设置代理配置。您可以使用它们专门设置sbt以使用代理,而其他基于JVM的应用程序根本不受影响。
从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.
请注意仅适用于Windows 的sbtconfig.txt
。当您使用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 "$@"
脚本的要点是使用从源构建的最新版本的sbt(这就是为什么我使用/Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar
)和$SBT_OPTS
属性作为将JVM属性传递给JVM的方法sbt使用。
上面的脚本允许我在MacOS X上的命令行上设置代理,如下所示:
SBT_OPTS="-Dhttp.proxyHost=proxyhost -Dhttp.proxyPort=9999" sbt
正如您所看到的,有很多方法可以为sbt设置代理,所有这些方法都可以归结为为JVM sbt使用设置代理。
答案 2 :(得分:11)
在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 :(得分:10)
我用过(这是一个unix环境):
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"
但显然使用SBT_OPTS代替JAVA_OPTS
答案 4 :(得分:8)
对于Windows用户,请输入以下命令:
set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080
答案 5 :(得分: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 替换为您的proxyPort。
如果您收到错误&#34;无法找到或加载主要课程&#34;你需要设置你的JAVA_HOME:
set JAVA_HOME=C:\Progra~1\Java\jdkxxxxxx
在64位窗口上时,请使用:
Progra~1 =&#39; Program Files&#39;
Progra~2 =&#39; Program Files(x86)&#39;
答案 6 :(得分: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"
(https配置是必须的,因为sbt库引用的许多网址都是https)
事实上,我甚至在两个配置条目中都有'http.proxySet'
到'true'
的额外设置。
答案 7 :(得分:3)
当我将代理信息添加到%JAVA_OPTS%时,我收到错误“-Dhttp.proxyHost = yourserver此时出乎意料”。我将代理信息放在%SBT_OPTS%中并且有效。
答案 8 :(得分: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://前缀。请记住避免使用引号。代码行中没有包含usr / pass,只包括添加-Dhttp.proxyUser = usr -Dhttp.proxyPassword = pass并使用相同的输入条件。谢谢@Jacek Laskowski! 干杯
答案 9 :(得分:2)
我在Lightbend Activator的FAQ部分找到了一个有用的项目。我使用的是Activator,它反过来使用SBT,所以不确定这是否可以帮助用户只使用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"
答案 10 :(得分:2)
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
答案 11 :(得分:1)
在Mac OS X / El Capitan上,您可以设置java环境变量:
$launchctl setenv _JAVA_OPTIONS "-Dhttp.proxyHost=192.168.1.54 -Dhttp.proxyPort=9999"
答案 12 :(得分:1)
我发现从终端启动IntelliJ IDEA让我通过互联网连接和下载。要从终端开始,请输入:
$ idea
答案 13 :(得分:0)
如果您使用的是需要身份验证的代理,那么我为您提供了一种解决方案:)
正如@Faiz上面解释的那样,SBT很难处理需要身份验证的代理。解决方案是,如果您无法按需关闭代理(例如,企业代理),则绕过此身份验证。 为此,建议您使用一个鱿鱼代理,并使用用户名和密码对其进行配置,以访问公司代理。参见:https://doc.ubuntu-fr.org/squid 然后,您可以设置JAVA_OPTS或SBT_OPTS环境变量,以使SBT连接到您自己的本地鱿鱼代理而不是公司代理:
export JAVA_OPTS =“ -Dhttps.proxyHost =本地主机-Dhttps.proxyPort = 3128 -Dhttp.proxyHost =本地主机-Dhttp.proxyPort = 3128”
(只需在您的bashrc中对此进行c / c,而无需进行任何修改,它应该可以正常工作)。
诀窍在于,Squid代理不需要任何身份验证,并且充当SBT与您的其他代理之间的中介。
如果您在使用此建议时遇到麻烦,请告诉我。
此致
埃德加
答案 14 :(得分:0)
答案 15 :(得分: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
或 (Windows)
set JAVA_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"
sbt compile
如果没有任何效果,则设置SBT_OPTS
(非Windows)
export SBT_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"'
sbt compile
或 (Windows)
set SBT_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"
sbt compile