Как использовать sbt из-за прокси?
Как мне настроить sbt для использования прокси?
Например, мое определение сборки должно подключаться к GitHub с указанием параметров подключения для http.proxy
, http.proxyPort
, user
, а также password
,
Как бы я передать эти настройки для sbt?
Есть ли простой способ переключаться между настройками прокси / без прокси, когда я работаю из дома?
13 ответов
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 должно быть связано с настройкой небольшого скрипта, в который вы можете в любое время вмешиваться.
Gotchas
- Не включайте "http://" в
yourserver
значение - Не включайте порт в
yourserver
значение - Вы, вероятно, также хотите включить
https.proxyHost
а такжеhttps.proxyPort
так как много вещей работает над https - Если ваш прокси-сервер требует аутентификации, даже не пытайтесь, если он не использует обычную аутентификацию, поскольку SBT не поддерживает ничего другого. Также всегда остерегайтесь четких учетных данных в переменных окружения! Обязательно удалите команды из вашей.bash_history, используя метод редактирования текста, который не будет создавать файлы трассировки (технически вам следует
shred
или жеsrm
весь файл). Если вы работаете в Windows, не беспокойтесь об этом, ваша безопасность уже испорчена, вы не можете больше навредить.
sbt
работает довольно стандартным способом по сравнению с тем, как обычно настраиваются другие проекты на основе JVM.
На самом деле sbt - это две "подсистемы" - лаунчер и ядро. Обычно это xsbt.boot.Boot
это выполняется до того, как ядро запускается с функциями, которые мы все знаем (а некоторые даже любят).
Поэтому вопрос заключается в том, как выполнить sbt, в котором говорится, как можно настроить прокси для сетевого трафика HTTP, HTTPS и FTP.
Ниже приводится полный список доступных свойств, которые можно установить для любого приложения Java, включая sbt, которые инструктируют API Java для маршрутизации связи через прокси:
- 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 и Прокси.
Некоторые сценарии поставляются с собственным способом настройки конфигурации прокси с использованием 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, собранную из исходников (поэтому я использую /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"
Но, видимо, вместо JAVA_OPTS используется SBT_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-битных окнах используйте:
Progra ~ 1 = "Программные файлы"
Progra~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 обязательна, так как многие URL, на которые ссылаются библиотеки sbt, являются 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 на правильный адрес без префиксов http:// или https:// в Dhttp и Dhttps, соответственно. Не забудьте избегать кавычек. Никакой usr / pass не включен в строку кода, для этого просто добавьте -Dhttp.proxyUser=usr -Dhttp.proxyPassword=pass с теми же критериями набора. Спасибо @Jacek Laskowski!. ура
SBT использует HTTP/HTTPS/SFTP/SSH и другие виды соединений с хранилищем. поэтому, когда за прокси, эти протоколы должны быть доступны.
В большинстве простых случаев в Windows вам просто нужно передать параметры параметров прокси в JVM, например:
java -Dhttp.proxyHost=myproxy -Dhttp.proxyPort=8080
Что будет делать.
Но если нет, вам нужно знать о нескольких вещах:
- если вы делаете HTTPS-соединение с хранилищем.
- были ли импортированы сертификаты в jre cacerts
- заменит ли ваш прокси ваши сертификаты сервера
Чтобы решить сначала, вы должны передать https прокси-параметр в 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
Я нашел пункт в разделе часто задаваемых вопросов об активаторе Lightbend полезным. Я использую 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"
В Mac OS X / El Capitan вы можете установить переменные среды Java:
$launchctl setenv _JAVA_OPTIONS "-Dhttp.proxyHost=192.168.1.54 -Dhttp.proxyPort=9999"
Попробуйте предоставить данные прокси в качестве параметров
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
Я обнаружил, что запуск IntelliJ IDEA с терминала позволяет мне подключаться и скачивать через Интернет. Чтобы начать с терминала, введите:
$ idea
Для тех, кто все еще работает в этом потоке и пытается найти, где и как настроить HTTP-прокси в IntelliJ, вот как мне удалось заставить его работать на меня. Надеюсь, это поможет!
(Примечание: укажите свое имя пользователя и пароль в соответствующих полях):-
Если вы используете прокси, который требует аутентификации, у меня есть решение для вас:)
Как объяснял выше @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 и вашим другим прокси.
Если у вас возникли проблемы с применением этого совета, пожалуйста, дайте мне знать.
С Уважением,
Эдгар