Як використовувати 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

4
У мене це не працює, я постійно отримую повідомлення "Ваш проксі вимагає автентифікації", і він не вдається dl deps. Я позаду застарілого NTLM :(
samthebest

6
Після того, як я це зрозумів - я зрозумів, що в моєму випадку Я ПОВИНЕН використовувати системний параметр HTTPS Java -Dhttps.proxyHost і -Dhttps.proxyPort!
Конні Крейсель,

1
Якщо ви
стоїте

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 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.

Будьте обережні з того, 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натомість потрібно використовувати файл.
асачет

@ antoine-sac, де я можу знайти sbt/conf/sbtoptsфайл для встановлення проксі?
krozaine

1
@krozaine в каталозі встановлення sbt - мій був під C:\Program Files (x86)\sbt\conf\sbtopts- на вікнах, очевидно.
асачет

@ 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

Єдине, що змусило мене працювати на CentOS
Icarus

9

Для користувачів Windows введіть таку команду:

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

3
У моєму випадку мені довелося також додати налаштування для https ... codeвстановити JAVA_OPTS = -Dhttp.proxySet = true -Dhttp.proxyHost = <проксі-сервер> -Dhttp.proxyPort = <Port> -Dhttp.proxyUser = <ім'я користувача> - Dht tp.proxyPassword = <пароль> -Dhttps.proxySet = вірно -Dhttps.proxyHost = <Proxy Server> -Dhttps.proxyPort = <Port> -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, і обидва РРРР на ваш proxyPort.

Якщо ви отримуєте помилку "Не вдалося знайти або завантажити основний клас", вам потрібно встановити свій JAVA_HOME:

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

У 64-розрядних вікнах використовуйте:

Progra ~ 1 = 'Файли програм'

Progra ~ 2 = 'Файли програм (x86)'


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'обох записів конфігурації.


3

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


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


ніде це чистий командний рядок для швидкого копіювання та вставлення, просто той @mad guy!
user278049

2

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

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. чи імпортовано сертифікати sever до jce 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 дуже важко справляється з проксі-сервером, що вимагає автентифікації. Рішення полягає в тому, щоб обійти цю автентифікацію, якщо ви не можете вимкнути проксі на вимогу (наприклад, корпоративний проксі). Для цього я пропоную вам використовувати проксі-сервер кальмара та налаштувати його за допомогою свого імені користувача та пароля для доступу до корпоративного проксі-сервера. Дивіться: https://doc.ubuntu-fr.org/squid Тоді ви можете встановити змінні середовища JAVA_OPTS або SBT_OPTS так, щоб SBT підключався до вашого локального проксі-сервера кальмара замість корпоративного проксі-сервера:

експортувати JAVA_OPTS = "-Dhttps.proxyHost = localhost -Dhttps.proxyPort = 3128 -Dhttp.proxyHost = localhost -Dhttp.proxyPort = 3128"

(просто перевірте це у вашому bashrc, не змінюючи нічого, і він повинен працювати нормально).

Фокус у тому, що Squid Proxy не вимагає ніякої автентифікації, а діє як проміжний продукт між SBT та вашим іншим проксі.

Якщо у вас виникли проблеми із застосуванням цієї поради, повідомте мене про це.

З повагою,

Едгар


0

Для тих, хто все ще сідає в цей потік, намагаючись знайти, де / як налаштувати HTTP-проксі в IntelliJ, ось як мені вдалося змусити його працювати для мене. Сподіваюся, це допоможе!

(Примітка: вкажіть своє ім’я користувача та пароль у відповідних полях): -

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


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.