如何配置 sbt 以使用代理?
例如,我的构建定义需要连接到 GitHub,为http.proxy
、http.proxyPort
、user
和指定连接参数password
。
我如何将这些设置传递给 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 等)。在 Windows 上,您可以%JAVA_OPTS%
像往常一样以 Windows 方式设置相同的环境变量 ( )。)
然后sbt
像往常一样运行:
sbt
在代理/无代理之间切换应该是设置一个小脚本的问题,您可以在需要时“啜饮”它。
yourserver
值中包含“http://”yourserver
值中包含端口https.proxyHost
,https.proxyPort
因为很多东西都通过 https 工作shred
或srm
整个文件)。如果您在 Windows 上,请不要担心,您的安全性已经被搞砸了,您不能再造成任何伤害。sbt
与通常配置其他基于 JVM 的项目的方式相比,它以相当标准的方式工作。
sbt 实际上是两个“子系统”——启动器和核心。它通常xsbt.boot.Boot
是在内核启动之前执行的,具有我们都知道(甚至有些人喜欢)的特性。
因此,如何执行 sbt 是一个问题,它说明了如何为 HTTP、HTTPS 和 FTP 网络流量设置代理。
以下是可以为任何 Java 应用程序设置的可用属性的完整列表,包括指示 Java API 通过代理路由通信的 sbt:
将http
上面的内容替换为https
andftp
以获取服务的属性列表。
一些sbt
脚本用于JAVA_OPTS
设置代理设置-Dhttp.proxyHost
以及-Dhttp.proxyPort
其他(上面列出的)。请参阅Java 网络和代理。
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.
请注意,它仅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 "$@"
该脚本的重点是使用从源代码构建的最新版本的 sbt(这就是我使用 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 使用设置代理。
在 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
我用过(这是一个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
对于 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都替换为您的 proxyPort。
如果您收到错误“无法找到或加载主类”,您需要设置您的 JAVA_HOME:
set JAVA_HOME=C:\Progra~1\Java\jdkxxxxxx
在 64 位窗口上时,使用:
Program~1 = '程序文件'
程序〜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"
(https 配置是必须的,因为 sbt 库引用的许多 url 都是 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 部分发现了一个有用的项目。我正在使用 Activator,而后者又使用 SBT,因此不确定这是否有助于仅使用 SBT 的用户,但如果您像我一样使用 Activator,并且在代理之后,请按照“代理背后”部分中的说明进行操作常问问题:
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
在 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 代理而不是您的公司代理:
导出 JAVA_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=3128 -Dhttp.proxyHost=localhost -Dhttp.proxyPort=3128"
(只需在你的 bashrc 中 c/c 这个而不修改任何东西,它应该可以正常工作)。
诀窍是 Squid Proxy 不需要任何身份验证,并且充当 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