web-dev-qa-db-ja.com

プロキシの背後からsbtを使用するには?

プロキシを使用するようにsbtを構成するにはどうすればよいですか?

たとえば、ビルド定義はGitHubに接続し、http.proxyhttp.proxyPortuser、およびpasswordの接続パラメーターを指定する必要があります。

これらの設定をsbtに渡すにはどうすればよいですか?

自宅で仕事をするときに、プロキシ設定とプロキシなし設定を簡単に切り替える方法はありますか?

81
supyo

sbtは、httpプロキシ設定の通常の環境変数を尊重します。

export Java_OPTS="$Java_OPTS -Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password"

もちろん、Unix(Linux/OSXなど)を想定しています。Windowsでは、通常のWindowsの方法と同じ環境変数(%Java_OPTS%)を設定できます。

その後、通常どおりsbtを実行します。

sbt

プロキシ/プロキシなしの切り替えは、必要なときにいつでも「丸lurみ」できる小さなスクリプトを設定するだけです。

落とし穴

  • yourserver値に「http://」を含めないでください
  • yourserver値にポートを含めないでください
  • また、https経由で多くのものが機能するため、https.proxyHostおよびhttps.proxyPortも含める必要があります。
  • プロキシが認証を必要とする場合、SBTは他の何もサポートしていないため、基本認証のみを使用する場合を除き、わざわざ試してはいけません。また、環境変数へのクリアテキストメッセージの資格情報に常に注意してください!トレースファイルを作成しないテキスト編集方法を使用して、.bash_historyからコマンドを必ず削除してください(技術的には、ファイル全体をshredまたはsrmする必要があります)。 Windowsを使用している場合、心配する必要はありません。セキュリティが既に台無しになっているため、これ以上害を加えることはできません。
129
Faiz

sbtは、他のJVMベースのプロジェクトが通常構成されている方法と比較して、かなり標準的な方法で機能します。

sbtは実際には2つの「サブシステム」-ランチャーとコアです。通常、xsbt.boot.Bootが実行されてから、コアがすべての機能(および一部の機能)で起動します。

したがって、HTTP、HTTPS、およびFTPネットワークトラフィック用のプロキシを設定する方法を示すsbtの実行方法の問題です。

以下は、Java AP​​Iにプロキシを介して通信をルーティングするよう指示するJavaアプリケーション(sbtを含む)に設定できる使用可能なプロパティのリストです。

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

上記のhttphttpsおよび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.

Windowsでのみ動作するsbtconfig.txtに注意してくださいonlycygwinを使用する場合、ファイルは参照されず、他のアプローチを使用する必要があります。

次のスクリプトで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 "$@"

スクリプトのポイントは、JVM sbtが使用するJVMプロパティにJVMプロパティを渡す手段として、ソースからビルドされたsbtの最新バージョンを使用することです(そのため、/Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jarプロパティを$SBT_OPTSプロパティで使用します)。

上記のスクリプトを使用すると、MacOS Xのコマンドラインで次のようにプロキシを設定できます。

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

ご覧のとおり、sbtのプロキシを設定する多くのアプローチがありますが、これらはすべて要約してJVM sbtが使用するプロキシを設定するためのものです。

25
Jacek Laskowski

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
11
Enis

私はこれを使用しました(これは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が使用されます

10
blue-sky

Windowsユーザーの場合、次のコマンドを入力します。

set Java_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080
8
rphonika

すべてのWindowsユーザーに有効な1つの回答を提供するには:

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 = 'Program Files(x86)'

6
King Julian

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'に追加設定しました。

4
Parasouramane D

%Java_OPTS%にプロキシ情報を追加すると、「-Dhttp.proxyHost = yourserver was unexpected at this time」というエラーが表示されました。プロキシ情報を%SBT_OPTS%に入れましたが、うまくいきました。

3
craigpfeifer

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}

2番目を解決するには、caをインポートする必要があります。たくさんのヒントがあります。

3番目の問題を解決するには、認証プロキシの使用を検討してください。

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

2
Jin Wang

Lightbend ActivatorのFAQセクションにあるアイテムが役に立ちました。私はActivatorを使用していますが、これは順番にSBTを使用するため、これがSBTだけでユーザーに役立つかどうかはわかりませんが、私のようにActivatorを使用し、プロキシの背後にいる場合は、よくある質問:

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

コンテンツが消えた場合に備えて、コピーと貼り付けを行います。

プロキシの背後でアクティベーターを実行する場合、追加の構成が必要です。最初に、ユーザーのホームディレクトリの〜/ .activator/activatorconfig.txtにあるアクティベーター構成ファイルを開きます。このファイルは存在しない可能性があることに注意してください。次の行を追加します(1行に1つのオプション):

-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
Peter Perháč

を使用して

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

ubuntu 15.10 x86_64 x86_64 GNU/Linuxで動作します。

YourServerを、それぞれDhttpおよびDhttpsのhttp://またはhttps://プレフィックスなしの適切なアドレスに置き換えます。引用符は避けてください。コード行にusr/passが含まれていないため、同じ入力条件で-Dhttp.proxyUser = usr -Dhttp.proxyPassword = passを追加するだけです。ありがとう@Jacek Laskowski!乾杯

2
user278049

Mac OS X/El Capitanでは、Java環境変数を設定できます。

$launchctl setenv _Java_OPTIONS "-Dhttp.proxyHost=192.168.1.54 -Dhttp.proxyPort=9999"
1
Adrian

ターミナルからIntelliJ IDEAを起動すると、インターネット経由で接続してダウンロードできることがわかりました。ターミナルから開始するには、次を入力します。

$ idea

1
krozaine

認証を必要とするプロキシを使用している場合、私はあなたのための解決策を持っています:)

@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でこれをc/cするだけでうまく動作するはずです)。

秘Theは、Squid Proxyは認証を必要とせず、SBTと他のプロキシの中間として機能することです。

このアドバイスの適用に問題がある場合は、お知らせください。

よろしく、

エドガー

0
Edgar L.

パラメータとしてプロキシの詳細を指定してみてください

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

または(windows)

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

または(windows)

set SBT_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"
sbt compile
0
Manjunath G

IntelliJでHTTPプロキシをどこで/どのように構成するかを見つけようとしているこのスレッドにまだ着地している人のために、私がそれをうまく機能させる方法を以下に示します。これがお役に立てば幸いです!

(注:対応するボックスにネットワークのユーザー名とパスワードを指定します):-

enter image description here

0
Deej