88

如何配置 sbt 以使用代理?

例如,我的构建定义需要连接到 GitHub,为http.proxyhttp.proxyPortuser和指定连接参数password

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

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

4

16 回答 16

138

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.proxyHosthttps.proxyPort因为很多东西都通过 https 工作
  • 如果您的代理需要身份验证,请不要尝试,除非它只使用基本身份验证,因为 SBT 不支持其他任何东西。还要始终注意将文本凭据明文发送到环境变量中!确保使用不会创建跟踪文件的文本编辑方法从 .bash_history 中删除命令(从技术上讲,您应该shredsrm整个文件)。如果您在 Windows 上,请不要担心,您的安全性已经被搞砸了,您不能再造成任何伤害。
于 2012-12-10T15:46:28.490 回答
26

sbt与通常配置其他基于 JVM 的项目的方式相比,它以相当标准的方式工作。

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上面的内容替换为httpsandftp以获取服务的属性列表。

一些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 使用设置代理。

于 2013-09-16T09:19:42.240 回答
14

在 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
于 2014-09-15T07:47:47.467 回答
12

我用过(这是一个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

于 2014-03-27T11:45:12.593 回答
9

对于 Windows 用户,输入以下命令:

set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080
于 2014-05-05T06:42:27.947 回答
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。

如果您收到错误“无法找到或加载主类”,您需要设置您的 JAVA_HOME:

set JAVA_HOME=C:\Progra~1\Java\jdkxxxxxx

在 64 位窗口上时,使用:

Program~1 = '程序文件'

程序〜2 ='程序文件(x86)'

于 2015-08-05T06:27:17.643 回答
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 库引用的许多 url 都是 https)

事实上,我什'http.proxySet''true'在两个配置条目中都有一个额外的设置。

于 2015-03-16T12:04:21.360 回答
3

当我将代理信息添加到 %JAVA_OPTS% 时,我收到一个错误“-Dhttp.proxyHost=yourserver 此时意外”。我将代理信息放在 %SBT_OPTS% 中,它起作用了。

于 2013-04-12T15:26:33.260 回答
2

使用

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!。干杯

于 2016-01-13T19:08:13.183 回答
2

我在 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"
于 2016-04-14T08:40:07.187 回答
2

SBT 使用 HTTP/HTTPS/SFTP/SSH 和其他类型的存储库连接。所以当在代理后面时,这些协议应该是可用的。

在 Windows 上的大多数简单情况下,您只需将代理参数选项传递给 JVM,例如:

java -Dhttp.proxyHost=myproxy -Dhttp.proxyPort=8080

那会做的。

但如果没有,您应该注意以下几点:

  1. 是否要与存储库建立 HTTPS 连接。
  2. 是否将服务器证书导入到 jre cacerts
  3. 您的代理是否会替换您的服务器证书

首先要解决,您应该将 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

于 2017-01-26T06:47:30.340 回答
1

在 Mac OS X / El Capitan 上,您可以设置 java 环境变量:

$launchctl setenv _JAVA_OPTIONS "-Dhttp.proxyHost=192.168.1.54 -Dhttp.proxyPort=9999"
于 2015-12-29T20:13:51.020 回答
1

我发现从终端启动 IntelliJ IDEA 可以让我通过互联网连接和下载。要从终端开始,请输入:

$ idea

于 2017-08-02T13:46:30.503 回答
0

如果您使用需要身份验证的代理,我有一个解决方案给您:)

正如@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 和您的其他代理之间的中间人。

如果您在应用此建议时遇到困难,请告诉我。

问候,

埃德加

于 2019-01-15T15:58:08.817 回答
0

对于那些仍在试图找到在 IntelliJ 中配置 HTTP 代理的位置/方式的人来说,这是我设法让它为我工作的方法。我希望这有帮助!

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

在此处输入图像描述

于 2019-04-15T23:46:17.180 回答
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

或(窗口)

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
于 2019-05-08T03:43:26.637 回答