如何从代理后面使用sbt?

时间:2012-12-10 15:00:17

标签: sbt

如何配置sbt以使用代理?

例如,我的构建定义需要连接到GitHub,指定http.proxyhttp.proxyPortuserpassword的连接参数。

我如何将这些设置传递给sbt?

当我在家工作时,是否有一种简单的方法可以在代理/无代理设置之间切换?

16 个答案:

答案 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

在代理/无代理之间切换应该是设置一个小脚本,你可以随时“啜饮”它。

陷阱

  • 请勿在{{1​​}}值
  • 中加入“http://”
  • 请勿在{{1​​}}值
  • 中包含该端口
  • 您可能还希望包含yourserveryourserver,因为很多内容适用于https
  • 如果您的代理需要身份验证,除非它只使用基本身份验证,否则请不要尝试,因为SBT不支持其他任何操作。还要注意清除环境变量的短信凭证!请务必使用不会创建跟踪文件的文本编辑方法从.bash_history中删除命令(从技术上讲,您应该https.proxyHosthttps.proxyPort整个文件。如果您使用的是Windows,请不要担心,您的安全性已经搞砸了,您不能再受到任何伤害。

答案 1 :(得分:25)

与通常配置其他基于JVM的项目的方式相比,

sbt以相当标准的方式工作。

实际上,sbt是两个“子系统” - 启动器和核心。通常xsbt.boot.Boot在核心启动之前执行,我们都知道这些功能(有些甚至更喜欢)。

因此,您应该如何执行sbt,说明如何为HTTP,HTTPS和FTP网络流量设置代理。

以下是可以为任何Java应用程序设置的可用属性的完整列表,包括指示Java API通过代理路由通信的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 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

那样做。

但如果没有,你应该注意的事情很少:

  1. 是否要与存储库建立HTTPS连接。
  2. 是否已将服务器证书导入jre cacerts
  3. 您的代理是否会替换您的服务器证书
  4. 首先解决,你应该将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)

对于那些仍在尝试在IntelliJ中查找HTTP代理的位置/方式的人,这就是我设法使其工作的方法。我希望这会有所帮助!

(注意:在相应的框中指定您的网络用户名和密码):-

enter image description here

答案 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