Wie benutze ich sbt von hinten Proxy?

85

Wie konfiguriere ich sbt für die Verwendung eines Proxys?

Zum Beispiel muss meine Builddefinition zu GitHub verbinden, Verbindungsparameter für die Angabe http.proxy, http.proxyPort,user , und password.

Wie würde ich diese Einstellungen an sbt übergeben?

Gibt es eine einfache Möglichkeit, zwischen Proxy- und No-Proxy-Einstellungen zu wechseln, wenn ich von zu Hause aus arbeite?

supyo
quelle

Antworten:

135

sbt respektiert die üblichen Umgebungsvariablen für http-Proxy-Einstellungen:

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

( Dies setzt natürlich Unix voraus (Linux / OSX usw.). Unter Windows können Sie einfach dieselbe Umgebungsvariable ( %JAVA_OPTS%) wie gewohnt auf Windows-Weise festlegen . )

Dann laufen Sie sbtwie gewohnt:

sbt

Beim Wechseln zwischen Proxy und No-Proxy sollte ein kleines Skript eingerichtet werden, in das Sie bei Bedarf "schlürfen" können.

Fallstricke

  • Fügen Sie "http: //" nicht in den yourserverWert ein
  • Fügen Sie den Port nicht in den yourserverWert ein
  • Sie möchten wahrscheinlich auch einbeziehen https.proxyHostund https.proxyPortda viele Dinge über https funktionieren
  • Wenn Ihr Proxy eine Authentifizierung erfordert, versuchen Sie es nicht einmal, es sei denn, er verwendet nur die Standardauthentifizierung, da SBT nichts anderes unterstützt. Achten Sie auch immer auf eindeutige SMS-Anmeldeinformationen in Umgebungsvariablen! Stellen Sie sicher, dass Sie die Befehle mit einer Textbearbeitungsmethode aus Ihrer .bash_history entfernen, mit der keine Tracedateien erstellt werden (technisch sollten Sie shredoder srmdie gesamte Datei). Wenn Sie unter Windows arbeiten, machen Sie sich keine Sorgen, Ihre Sicherheit ist bereits durcheinander und Sie können keinen Schaden mehr anrichten.
Faiz
quelle
1
Danke, das ist die richtige Antwort. Es stellt sich heraus, dass mein eigentliches Problem darin besteht, dass mein Proxy die von GIT verwendeten Ports blockiert, sodass ich das http-Protokoll verwenden muss.
Supyo
4
+1 Unter Windows 7 musste ich jedoch über die Eingabeaufforderung verwenden set JAVA_OPTS=-Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=password, damit dies funktioniert.
HeatfanJohn
4
Funktioniert nicht für mich, ich erhalte immer wieder "Ihr Proxy erfordert Authentifizierung" und es kann nicht dl deps. Ich bin hinter einem
alten
6
Nachdem ich es herausgefunden hatte, wurde mir klar, dass ich in meinem Fall den HTTPS-Java-Systemparameter verwenden muss -Dhttps.proxyHost und -Dhttps.proxyPort!
Conny Kreyßel
1
Wenn Sie hinter einem alten NTLM stehen, empfehle ich die Verwendung von CNTLM, es funktioniert für mich
Elouan Keryell-Even
25

sbt funktioniert ziemlich normal im Vergleich zu anderen JVM-basierten Projekten, die normalerweise konfiguriert werden.

sbt ist in der Tat zwei "Subsysteme" - der Launcher und der Kern. Es wird normalerweise xsbt.boot.Bootausgeführt, bevor der Kern mit den Funktionen startet, die wir alle kennen (und manche sogar mögen).

Es kommt daher darauf an, wie Sie sbt ausführen, und wie Sie einen Proxy für HTTP-, HTTPS- und FTP-Netzwerkverkehr einrichten können.

Im Folgenden finden Sie die gesamte Liste der verfügbaren Eigenschaften, die für jede Java-Anwendung festgelegt werden können, einschließlich sbt, die die Java-API anweist, die Kommunikation über einen Proxy weiterzuleiten:

  • HTTP-Proxy
  • http_proxy_user
  • http_proxy_pass
  • http.proxyHost
  • http.proxyPort
  • http.proxyUser
  • http.proxyPassword

Ersetzen Sie httpoben durch httpsund ftp, um die Liste der Eigenschaften für die Dienste zu erhalten.

Einige sbtSkripte dienen JAVA_OPTSzum Einrichten der Proxy-Einstellungen mit -Dhttp.proxyHostund -Dhttp.proxyPortunter den anderen (oben aufgeführt). Siehe Java Networking und Proxies .

Einige Skripte verfügen über eine eigene Methode zum Einrichten der Proxy-Konfiguration mithilfe der SBT_OPTSEigenschaft .sbtoptsoder (nur unter Windows) %SBT_HOME%\conf\sbtconfig.txt. Sie können sie verwenden, um sbt speziell für die Verwendung von Proxys festzulegen, während die anderen JVM-basierten Anwendungen überhaupt nicht betroffen sind.

Über das sbtBefehlszeilentool:

# 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)

Und hier kommt ein Auszug aus 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.

Seien Sie vorsichtig mit , sbtconfig.txtdas einfach funktioniert unter Windows nur . Wenn Sie cygwindie Datei verwenden, wird sie nicht konsultiert, und Sie müssen auf die anderen Ansätze zurückgreifen.

Ich verwende sbt mit dem folgenden Skript:

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

Der Zweck des Skripts besteht darin, die neueste Version von sbt zu verwenden, die aus den Quellen (aus diesem Grund verwende ich /Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar) mit $SBT_OPTSproperty erstellt wurde, um JVM-Eigenschaften an die von sbt verwendeten JVM-Eigenschaften zu übergeben.

Mit dem obigen Skript kann ich den Proxy in der Befehlszeile unter MacOS X wie folgt festlegen:

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

Wie Sie sehen können, gibt es viele Ansätze zum Festlegen eines Proxys für sbt, die sich alle auf das Festlegen eines Proxys für die von sbt verwendeten JVM beschränken.

Jacek Laskowski
quelle
13

Fügen Sie in einer Windows-Umgebung einfach die folgende Zeile in die Datei sbt / sbtconfig.txt ein

-Dhttp.proxyHost=PROXYHOST 
-Dhttp.proxyPort=PROXYPORT 
-Dhttp.proxyUser=USERNAME 
-Dhttp.proxyPassword=XXXX

oder das Https-Äquivalent (dank Kommentaren)

-Dhttps.proxyHost=PROXYHOST 
-Dhttps.proxyPort=PROXYPORT 
-Dhttps.proxyUser=USERNAME 
-Dhttps.proxyPassword=XXXX
Enis
quelle
3
Dies funktionierte für mich, solange ich in sbtconfig.txt eine weitere Zeile mit den entsprechenden https- Eigenschaften hinzufügte . Ich habe genau die gleichen Werte wie für die entsprechenden http-Eigenschaften verwendet. Also: -Dhttps.proxyHost = PROXYHOST -Dhttps.proxyPort = PROXYPORT -Dhttps.proxyUser = USERNAME -Dhttps.proxyPassword = XXXX
Snark
4
WICHTIGER HINWEIS: funktioniert nicht mehr! Sie müssen sbt/conf/sbtoptsstattdessen die Datei verwenden.
Asac
@ Antoine-Sac Wo finde ich eine sbt/conf/sbtoptsDatei zum Einstellen des Proxys?
Krozaine
1
@ krozaine im sbt-Installationsverzeichnis - meins war C:\Program Files (x86)\sbt\conf\sbtoptsoffensichtlich unter Windows.
Asac
@ Antoine-Sac es scheint für mich zu funktionieren, ohne die sbtoptsDatei zu berühren
enissay
12

Ich habe verwendet (dies ist eine Unix-Umgebung):

export SBT_OPTS="$SBT_OPTS -Dhttp.proxyHost=myproxy-Dhttp.proxyPort=myport"

Dies hat bei meinem Setup nicht funktioniert:

export JAVA_OPTS="$JAVA_OPTS -Dhttp.proxyHost=myproxy-Dhttp.proxyPort=myport"

In der Datei sbt.sh:

JAVA_OPTS          environment variable, if unset uses "$java_opts"
SBT_OPTS           environment variable, if unset uses "$default_sbt_opts"

Aber anscheinend wird SBT_OPTS anstelle von JAVA_OPTS verwendet

blauer Himmel
quelle
Ich kann im Internet nicht finden, wo ich die sbt.shDatei in mein Projekt einfügen soll!
Hadilq
Die Variable SBT_OPTS ENV war das einzige, was es für mich unter CentOS
Icarus
9

Geben Sie für Windows-Benutzer den folgenden Befehl ein:

set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080
rphonika
quelle
3
In meinem Fall musste ich auch Einstellungen für https hinzufügen ... codeset JAVA_OPTS = -Dhttp.proxySet = true -Dhttp.proxyHost = <Proxyserver> -Dhttp.proxyPort = <Port> -Dhttp.proxyUser = <Benutzername> - Dht tp.proxyPassword = <Passwort> -Dhttps.proxySet = true -Dhttps.proxyHost = <Proxyserver> -Dhttps.proxyPort = <Port> -Dhttps.proxyUser = <Benutzername> -Dhttp s.proxyPassword = <Passwort>code
Arun
6

So geben Sie eine Antwort, die für alle Windows-Benutzer funktioniert:

Fügen Sie Ihrer sbtconfig.txt Folgendes hinzu (C: \ Programme (x86) \ sbt \ conf)

-Dhttp.proxyHost=XXXXXXX -Dhttp.proxyPort=YYYY -Dhttp.proxySet=true -Dhttps.proxyHost=XXXXXXX -Dhttps.proxyPort=YYYY -Dhttps.proxySet=true

Ersetzen Sie sowohl XXXXXXX durch Ihren proxyHost als auch JJJJ durch Ihren proxyPort.

Wenn die Fehlermeldung "Hauptklasse konnte nicht gefunden oder geladen werden" angezeigt wird, müssen Sie JAVA_HOME festlegen:

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

Verwenden Sie unter 64-Bit-Fenstern:

Progra ~ 1 = 'Programme'

Progra ~ 2 = 'Programme (x86)'

JayL
quelle
4

Fügen Sie sowohl die http- als auch die https-Konfiguration hinzu:

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 ist ein Muss, da viele URLs, auf die von den sbt-Bibliotheken verwiesen wird, https sind.)

In der Tat, ich hatte sogar eine zusätzliche Einstellung 'http.proxySet'zu 'true'in beiden Konfigurationseinträge.

Parasouramane D.
quelle
3

Beim Hinzufügen der Proxy-Informationen zu% JAVA_OPTS% wurde die Fehlermeldung "-Dhttp.proxyHost = Ihr Server war zu diesem Zeitpunkt unerwartet" angezeigt. Ich habe die Proxy-Informationen in% SBT_OPTS% eingegeben und es hat funktioniert.

craigpfeifer
quelle
6
Unter Windows hatte ich den gleichen Fehler, aber das Setzen von SBT_OPTS hat den Fehler korrigiert, aber den Proxy nicht gesetzt. Die Lösung bestand darin, JAVA_OPTS oder SBT_OPTS festzulegen, jedoch ohne die Anführungszeichen um den Wert.
pgras
2

Verwenden von

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

funktioniert in Ubuntu 15.10 x86_64 x86_64 GNU / Linux.

Ersetzen Sie Ihren Server durch die richtige Adresse ohne die Präfixe http: // oder https: // in Dhttp bzw. Dhttps. Denken Sie daran, die Anführungszeichen zu vermeiden. Kein usr / pass in der Codezeile enthalten, um dies einzuschließen, fügen Sie einfach -Dhttp.proxyUser = usr -Dhttp.proxyPassword = pass mit denselben Typisierungskriterien hinzu. Danke @Jacek Laskowski!. Prost

user278049
quelle
Nirgendwo ist es die saubere Befehlszeile zum schnellen Kopieren und Einfügen, nur dieser @ Mad-Typ!
user278049
2

Ich fand einen Artikel im FAQ-Bereich von Lightbend Activator nützlich. Ich verwende Activator, das wiederum SBT verwendet. Ich bin mir also nicht sicher, ob dies Benutzern nur mit SBT hilft. Wenn Sie jedoch Activator wie ich verwenden und sich hinter einem Proxy befinden, befolgen Sie die Anweisungen im Abschnitt "Hinter einem Proxy" des FAQ:

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

Nur für den Fall, dass der Inhalt verschwindet, hier ein Copy-Paste:

Wenn Activator hinter einem Proxy ausgeführt wird, ist eine zusätzliche Konfiguration erforderlich. Öffnen Sie zunächst die Aktivator-Konfigurationsdatei, die sich in Ihrem Benutzer-Ausgangsverzeichnis unter ~ / .activator / activatorconfig.txt befindet. Beachten Sie, dass diese Datei möglicherweise nicht vorhanden ist. Fügen Sie die folgenden Zeilen hinzu (eine Option pro Zeile):

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

SBT verwendet sowohl HTTP / HTTPS / SFTP / SSH als auch andere Arten von Verbindungen zu einem Repository. Wenn Sie sich also hinter einem Proxy befinden, sollten diese Protokolle verfügbar sein.

In den meisten einfachen Fällen unter Windows müssen Sie nur Proxy-Parameteroptionen an JVM übergeben, z.

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

Das wird reichen.

Wenn nicht, sollten Sie sich einiger Dinge bewusst sein:

  1. ob Sie eine HTTPS-Verbindung zum Repository herstellen.
  2. ob mehrere Zertifikate in jre cacerts importiert wurden
  3. ob Ihr Proxy Ihre Serverzertifikate ersetzen würde

Um dies zuerst zu lösen, sollten Sie den https-Proxy-Parameter an jvm übergeben, wie:

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

Um die zweite zu lösen, sollten Sie die ca. importieren. Es gibt viele Tipps.

Um das dritte Problem zu lösen, können Sie möglicherweise einen Authentifizierungs-Proxy verwenden.

Um die Konfiguration von SBT zu vereinfachen, werden sbtconfig.txt und sbtops im Verzeichnis conf bereitgestellt.

Referenz:
http://www.scala-sbt.org/0.13/docs/Setup-Notes.html
http://www.scala-sbt.org/1.0/docs/Publishing.html

Jin Wang
quelle
Welche Art von Fehlermeldung erhalten Sie, wenn es sich um ein Zertifikat handelt? Wenn ich http-Eigenschaften verwende, wird eine klare Meldung angezeigt, dass ich wahrscheinlich hinter einem Proxy usw. stehe. Wenn ich zu httpS-Eigenschaften wechsle, habe ich die Meldung nicht mehr, daher gehe ich davon aus, dass sie besser ist ... aber ich bekomme Probleme wie hier beschrieben: stackoverflow.com/questions/43464585/…
Vincent F
1

Unter Mac OS X / El Capitan können Sie Java-Umgebungsvariablen festlegen:

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

Ich habe festgestellt, dass ich durch Starten von IntelliJ IDEA vom Terminal aus eine Verbindung herstellen und über das Internet herunterladen kann. Geben Sie Folgendes ein, um vom Terminal aus zu starten:

$ idea

Krozaine
quelle
0

Wenn Sie einen Proxy verwenden, für den eine Authentifizierung erforderlich ist, habe ich eine Lösung für Sie :)

Wie oben von @Faiz erläutert, fällt es SBT sehr schwer, Proxys zu handhaben, für die eine Authentifizierung erforderlich ist. Die Lösung besteht darin, diese Authentifizierung zu umgehen, wenn Sie Ihren Proxy bei Bedarf nicht deaktivieren können (z. B. Unternehmens-Proxy). Ich schlage vor, dass Sie einen Squid-Proxy verwenden und ihn mit Ihrem Benutzernamen und Passwort konfigurieren, um auf Ihren Unternehmens-Proxy zuzugreifen. Siehe: https://doc.ubuntu-fr.org/squid Anschließend können Sie die Umgebungsvariablen JAVA_OPTS oder SBT_OPTS so festlegen, dass SBT anstelle Ihres Unternehmens-Proxys eine Verbindung zu Ihrem eigenen lokalen Squid-Proxy herstellt:

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

(c / c dies einfach in Ihrem bashrc ohne etwas zu ändern und es sollte gut funktionieren).

Der Trick besteht darin, dass Squid Proxy keine Authentifizierung erfordert und als Zwischenstufe zwischen SBT und Ihrem anderen Proxy fungiert.

Wenn Sie Probleme bei der Anwendung dieses Hinweises haben, lassen Sie es mich bitte wissen.

Grüße,

Edgar

Edgar L.
quelle
0

Für diejenigen, die immer noch auf diesem Thread landen und versuchen herauszufinden, wo / wie der HTTP-Proxy in IntelliJ konfiguriert werden kann, habe ich es hier geschafft, ihn für mich zum Laufen zu bringen. Ich hoffe das hilft!

(Hinweis: Geben Sie Ihren Netzwerkbenutzernamen und Ihr Kennwort in den entsprechenden Feldern an.): -

Geben Sie hier die Bildbeschreibung ein

Deej
quelle
0

Versuchen Sie, die Proxy-Details als Parameter anzugeben

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

Wenn das nicht funktioniert, versuchen Sie es mit JAVA_OPTS (keine Windows)

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

sbt compile

oder (Fenster)

set JAVA_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"
sbt compile

Wenn nichts funktioniert, setzen Sie SBT_OPTS

(keine Fenster)

export SBT_OPTS = "-Dhttps.proxyHost=localhost -Dhttps.proxyPort=port -Dhttp.proxyHost=localhost -Dhttp.proxyPort=port"'
sbt compile

oder (Fenster)

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