Как использовать sbt из-за прокси-сервера?

Как настроить sbt для использования прокси?

Например, для определения моей сборки необходимо подключиться к GitHub, указав параметры подключения для http.proxy, http.proxyPort, user и password.

Как передать эти настройки в sbt?

Есть ли простой способ переключения между настройками прокси/без прокси-сервера, когда я работаю из дома?

Ответ 1

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

Переключение между proxy/no-proxy должно быть связано с настройкой небольшого script, который вы можете "разрывать", когда вам это нужно.

Gotchas

  • Не включайте "http://" в значение yourserver
  • Не включайте порт в значение yourserver
  • Возможно, вы также захотите включить https.proxyHost и https.proxyPort, так как много вещей работает над https
  • Если ваш прокси требует проверки подлинности, даже не утруждайте себя попытками, если только он не использует базовую аутентификацию, поскольку SBT ничего не поддерживает. Также всегда будьте осторожны с четкими текстовыми учетными данными в переменных среды! Обязательно удалите команды из вашей .bash_history, используя метод редактирования текста, который не будет создавать файлы трассировки (технически вы должны shred или srm весь файл). Если вы находитесь в Windows, не беспокойтесь об этом, ваша безопасность уже запутана, вы не можете причинить больше вреда.

Ответ 2

sbt работает довольно стандартным образом по сравнению с тем, как обычно настраиваются другие проекты на основе JVM.

sbt - это фактически две "подсистемы" - пусковая установка и ядро. Обычно он xsbt.boot.Boot запускается до того, как ядро ​​начнет работу с функциями, которые мы все знаем (и некоторые даже похожи).

Поэтому вопрос о том, как вы выполняете sbt, говорит о том, как вы можете настроить прокси для HTTP, HTTPS и FTP-трафика.

Ниже представлен весь список доступных свойств, которые могут быть установлены для любого приложения Java, включая sbt, которые инструктируют Java API для маршрутизации связи через прокси:

  • http_proxy
  • http_proxy_user
  • http_proxy_pass
  • http.proxyHost
  • http.proxyPort
  • http.proxyUser
  • http.proxyPassword

Замените http выше на https и ftp, чтобы получить список свойств для служб.

В некоторых сценариях sbt используется JAVA_OPTS для настройки параметров прокси с -Dhttp.proxyHost и -Dhttp.proxyPort среди других (перечисленные выше). См. Java Networking и 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 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 со следующим script:

$JAVA_HOME/bin/java $SBT_OPTS -jar /Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar "[email protected]"

Точка script заключается в использовании последней версии sbt, построенной из исходных текстов (то, почему я использую /Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar) с свойством $SBT_OPTS как средство передачи свойств JVM в JVM sbt uses.

script выше позволяет установить прокси-сервер в командной строке на MacOS X следующим образом:

SBT_OPTS="-Dhttp.proxyHost=proxyhost -Dhttp.proxyPort=9999" sbt

Как вы можете видеть, существует множество подходов к настройке прокси-сервера для sbt, которые в значительной степени сводятся к установке прокси-сервера для использования JVM-sbt.

Ответ 3

В среде 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

Ответ 4

Я использовал (это среда 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

Ответ 5

Для пользователей Windows введите следующую команду:

set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080

Ответ 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 вашим прокси-хостом, и как YYYY с вашим proxyPort.

Если вы получите сообщение об ошибке "Не удалось найти или загрузить основной класс", вам нужно установить JAVA_HOME:

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

Если в 64-битных окнах используйте:

Progra ~ 1 = 'Program Files'

Progra ~ 2 = 'Program Files (x86)'

Ответ 7

Добавьте конфигурацию 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 config обязателен, поскольку многие URL-адреса, передаваемые библиотеками sbt, являются https)

Фактически, у меня даже была дополнительная настройка 'http.proxySet' - 'true' в обеих записях конфигурации.

Ответ 8

Когда я добавил информацию прокси в% JAVA_OPTS%, я получил сообщение об ошибке "-Dhttp.proxyHost = ваш сервер был неожиданным в это время". Я поместил информацию прокси в% SBT_OPTS%, и она сработала.

Ответ 9

Использование

sbt -Dhttp.proxyHost=yourServer-Dhttps.proxyHost=yourServer -Dhttp.proxyPort=yourPort -Dhttps.proxyPort=yourPort

работает в Ubuntu 15.10 x86_64 x86_64 GNU/Linux.

Замените ваш сервер на соответствующий адрес без префиксов http://или https://в Dhttp и Dhttps, соответственно. Не забывайте избегать кавычек. No usr/pass не включен в строку кода, чтобы добавить, что просто добавьте -Dhttp.proxyUser = usr -Dhttp.proxyPassword = pass с теми же критериями ввода. Спасибо @Jacek Laskowski!. Приветствия

Ответ 10

Я нашел полезный элемент в разделе часто задаваемых вопросов Lightbend Activator. Я использую Activator, который, в свою очередь, использует SBT, поэтому не уверен, что это помогает пользователям только с SBT, но если вы используете Activator, как я, и находитесь за прокси-сервером, следуйте инструкциям в разделе "Behind A Proxy" Справка:

https://www.lightbend.com/activator/docs

На всякий случай содержимое исчезает, здесь copy-paste:

При запуске активатора за прокси-сервером некоторая дополнительная конфигурация необходим. Сначала откройте файл конфигурации активатора, найденный в вашем домашняя директория пользователя под ~/.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"

Ответ 11

SBT использует как HTTP/HTTPS/SFTP/SSH, так и другие типы подключений к репозиторию. поэтому, когда за прокси-сервером эти протоколы должны быть доступны.

В большинстве простых случаев в Windows вам просто нужно передать параметры параметров прокси для JVM, например:

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

Это сделает.

Но если нет, есть несколько вещей, о которых вы должны знать:

  • если вы подключаете HTTPS к репозиторию.
  • были ли импортированы сертификаты sever в jre cacerts
  • может ли ваш прокси заменить ваши сертификаты сервера.

Чтобы решить сначала, вы должны передать параметр https proxy в jvm, например:

java -Dhttps.proxyHost=myproxy -Dhttps.proxyPort=8080 -Djavax.net.ssl.trustStore=${TRUST_STORE_PATH}

чтобы решить вторую, вы должны импортировать ок. есть много советов.

чтобы решить третью, вы, возможно, можете рассмотреть возможность использования прокси-сервера аутентификации.

Чтобы упростить конфигурацию SBT, он предоставит sbtconfig.txt и sbtops в каталоге conf, посмотрите на него.

Справка:
http://www.scala-sbt.org/0.13/docs/Setup-Notes.html
http://www.scala-sbt.org/1.0/docs/Publishing.html

Ответ 12

В Mac OS X/El Capitan вы можете установить переменные среды java:

$launchctl setenv _JAVA_OPTIONS "-Dhttp.proxyHost=192.168.1.54 -Dhttp.proxyPort=9999"

Ответ 13

Я обнаружил, что запуск IntelliJ IDEA с терминала позволяет мне подключаться и скачивать через Интернет. Чтобы начать с терминала, введите:

$ idea

Ответ 14

Если вы используете прокси, который требует аутентификации, у меня есть решение для вас :)

Как объяснял выше @Faiz, SBT очень сложно обрабатывать прокси, требующий аутентификации. Решение состоит в том, чтобы обойти эту аутентификацию, если вы не можете отключить прокси-сервер по требованию (например, корпоративный прокси-сервер). Для этого я предлагаю вам использовать прокси-сервер squid и настроить его с вашим именем пользователя и паролем для доступа к вашему корпоративному прокси-серверу. См.: https://doc.ubuntu-fr.org/squid. Затем вы можете установить переменные среды JAVA_OPTS или SBT_OPTS, чтобы SBT подключался к вашему локальному прокси-серверу squid вместо корпоративного прокси-сервера:

export JAVA_OPTS = "-Dhttps.proxyHost = localhost -Dhttps.proxyPort = 3128 -Dhttp.proxyHost = localhost -Dhttp.proxyPort = 3128"

(просто с/с это в вашем bashrc без каких-либо изменений, и это должно работать нормально).

Хитрость заключается в том, что Squid Proxy не требует никакой аутентификации и действует как промежуточное звено между SBT и вашим другим прокси.

Если у вас возникли проблемы с применением этого совета, пожалуйста, дайте мне знать.

С Уважением,

Эдгар

Ответ 15

Для тех, кто все еще работает в этом потоке и пытается найти, где и как настроить HTTP-прокси в IntelliJ, вот как мне удалось заставить его работать на меня. Надеюсь, это поможет!

(Примечание: укажите свое имя пользователя и пароль в соответствующих полях): -

enter image description here

Ответ 16

Попробуйте предоставить данные прокси в качестве параметров

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