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

85

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

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

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

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

супё
источник

Ответы:

135

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

Переключение между прокси / без прокси должно заключаться в настройке небольшого скрипта, который вы можете «проглотить», когда вам это нужно.

Попался

  • Не включайте "http: //" в yourserverзначение
  • Не включайте порт в yourserverзначение
  • Вы, вероятно, также захотите включить, https.proxyHostи https.proxyPortпоскольку многие вещи работают по https
  • Если ваш прокси требует аутентификации, даже не пытайтесь, если только он не использует простую аутентификацию, поскольку SBT больше ничего не поддерживает. Также всегда будьте осторожны при вводе учетных данных в переменные среды! Обязательно удалите команды из вашего .bash_history, используя метод редактирования текста, который не создает файлы трассировки (технически вы должны shredили srmвесь файл). Если вы используете Windows, не беспокойтесь об этом, ваша безопасность уже нарушена, вы больше не можете причинить вреда.
Файз
источник
1
Спасибо, это правильный ответ. Оказывается, моя настоящая проблема в том, что мой прокси блокирует порты, используемые GIT, поэтому мне приходится использовать протокол http.
supyo
4
+1 Однако в Windows 7 мне пришлось использовать командную строку, set JAVA_OPTS=-Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=passwordчтобы заставить это работать.
HeatfanJohn 06
4
У меня не работает, я все время получаю «Ваш прокси требует аутентификации» и не работает dl deps. Я за устаревшим NTLM :(
samthebest
6
Разобравшись в этом, я понял, что в моем случае ДОЛЖЕН использовать системный параметр HTTPS java -Dhttps.proxyHost и -Dhttps.proxyPort!
Conny Kreyßel
1
Если вы используете устаревший NTLM, я рекомендую использовать CNTLM, у меня он работает,
Элуан Кериелл-Эвен,
25

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 и прокси .

Некоторые сценарии содержат собственный способ настройки конфигурации прокси с помощью 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.

Яцек Ласковски
источник
13

В среде 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
Это сработало для меня, если я добавил еще одну строку в sbtconfig.txt с эквивалентными https свойствами. Я использовал те же значения, что и для соответствующих свойств http. Таким образом: -Dhttps.proxyHost = PROXYHOST -Dhttps.proxyPort = PROXYPORT -Dhttps.proxyUser = USERNAME -Dhttps.proxyPassword = XXXX
snark
5
ВАЖНОЕ ПРИМЕЧАНИЕ: больше не работает! sbt/conf/sbtoptsВместо этого вы должны использовать файл.
asachet 05
@ antoine-sac где я могу найти sbt/conf/sbtoptsфайл для установки прокси?
krozaine 02
1
@krozaine в каталоге установки sbt - мой был под C:\Program Files (x86)\sbt\conf\sbtopts- очевидно, на окнах.
asachet
@ antoine-sac, похоже, у меня работает, не касаясь sbtoptsфайла
enissay
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

синее небо
источник
Не могу найти в Интернете, куда мне поместить sbt.shфайл в моем проекте!
hadilq
Переменная SBT_OPTS ENV была единственным, что заставило меня работать на CentOS
Icarus,
9

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

set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080
rphonika
источник
3
В моем случае мне также пришлось добавить настройки для https ... codeустановить JAVA_OPTS = -Dhttp.proxySet = true -Dhttp.proxyHost = <Proxy Server> -Dhttp.proxyPort = <Port> -Dhttp.proxyUser = <Username> - Dht tp.proxyPassword = <Пароль> -Dhttps.proxySet = true -Dhttps.proxyHost = <Прокси-сервер> -Dhttps.proxyPort = <Порт> -Dhttps.proxyUser = <Имя пользователя> -Dhttp s.proxyPassword = <Пароль>code
Arun
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-битных окнах используйте:

Progra ~ 1 = "Программные файлы"

Progra ~ 2 = 'Программные файлы (x86)'

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

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

Parasouramane D
источник
3

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

Craigpfeifer
источник
6
В Windows у меня была такая же ошибка, но установка SBT_OPTS исправила ошибку, но не установила прокси. Решением было установить JAVA_OPTS или SBT_OPTS, но без кавычек вокруг значения.
pgras
2

С помощью

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 !. Ура

user278049
источник
нигде нет чистой командной строки для быстрого копирования и вставки, просто этот @mad парень!
user278049
2

Я нашел полезный пункт в разделе часто задаваемых вопросов Lightbend Activator. Я использую 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"
Петер Перхач
источник
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, предоставьте 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

Джин Ван
источник
какое сообщение об ошибке вы получаете, когда это проблема с сертификатом? Когда я использую свойства http, я получаю четкое сообщение о том, что я, вероятно, за прокси-сервером и т. Д. Когда я переключаюсь на свойства httpS, у меня больше нет сообщения, поэтому я предполагаю, что это лучше ... но у меня возникают проблемы как описано здесь: stackoverflow.com/questions/43464585/…
Винсент Ф,
1

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

$launchctl setenv _JAVA_OPTIONS "-Dhttp.proxyHost=192.168.1.54 -Dhttp.proxyPort=9999"
Адриан
источник
1

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

$ idea

крозайне
источник
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"

(просто c / c это в вашем bashrc, ничего не изменяя, и он должен работать нормально).

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

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

С Уважением,

Эдгар

Эдгар Л.
источник
0

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

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

введите описание изображения здесь

Deej
источник
0

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

sbt compile -Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port

Если это не работает, попробуйте JAVA_OPTS (без окон)

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
Манджунатх Г
источник