如何配置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
shred
或srm
整个文件)。 如果您使用的是Windows,则不必担心,您的安全性已经被破坏,您无法造成更多的损害。sbt
的工作方式与其他基于JVM的项目通常配置方式相比较标准。
sbt实际上是两个“子系统”——launcher和core。通常在core启动带有我们所知道的特性(甚至一些人喜欢的特性)之前,会执行xsbt.boot.Boot
。
因此,如何执行sbt决定了如何设置HTTP、HTTPS和FTP网络流量的代理。
以下是可为任何Java应用程序设置的所有可用属性列表,包括sbt,它们指导Java API通过代理路由通信:
将上面的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.
使用 cygwin
时,要小心只在 Windows 系统上有效的 sbtconfig.txt
。如果该文件未被使用,则需要采用其他方法。
我正在使用以下脚本来运行 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属性传递给sbt使用的JVM的手段。
上面的脚本让我可以在MacOS X命令行上设置代理,如下所示:
SBT_OPTS="-Dhttp.proxyHost=proxyhost -Dhttp.proxyPort=9999" sbt
正如你所看到的,有许多设置代理服务器的方法可以应用于sbt,但基本上都归结为为JVM设置sbt使用的代理服务器。
-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
sbt/conf/sbtopts
文件代替。 - asachetsbt/conf/sbtopts
文件来设置代理? - krozaineC:\Program Files (x86)\sbt\conf\sbtopts
下 - 在Windows上显然。 - asachetsbtopts
文件。 - enissay我使用的是(这是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
sbt.sh
文件放在项目的哪个位置! - hadilq对于 Windows 用户,请输入以下命令:
set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080
code
set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=<代理服务器> -Dhttp.proxyPort=<端口号> -Dhttp.proxyUser=<用户名> -Dhttp.proxyPassword=<密码> -Dhttps.proxySet=true -Dhttps.proxyHost=<代理服务器> -Dhttps.proxyPort=<端口号> -Dhttps.proxyUser=<用户名> -Dhttps.proxyPassword=<密码> code
- Arun-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位Windows上使用时,请使用以下内容:
Progra~1 =“Program Files”
Progra~2 =“Program Files(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'
。
-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 -Dhttp.proxyHost=yourServer-Dhttps.proxyHost=yourServer -Dhttp.proxyPort=yourPort -Dhttps.proxyPort=yourPort
适用于Ubuntu 15.10 x86_64 x86_64 GNU/Linux。
在Dhttp和Dhttps中分别替换yourServer为正确的地址,不要包含http://或https://前缀。记得避免使用引号。代码行中不包括usr/pass,如果要包括,请按照相同的输入法添加-Dhttp.proxyUser=usr -Dhttp.proxyPassword=pass。感谢@Jacek Laskowski!祝福。
set JAVA_OPTS=-Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password
才能使此项工作。 - HeatfanJohn-Dhttps.proxyHost
和-Dhttps.proxyPort
! - Conny Kreyßel