web-dev-qa-db-fra.com

Comment utiliser sbt de derrière un proxy?

Comment configurer sbt pour utiliser un proxy?

Par exemple, ma définition de construction doit se connecter à GitHub en spécifiant les paramètres de connexion pour http.proxy, http.proxyPort, user et password.

Comment pourrais-je passer dans ces paramètres à sbt?

Existe-t-il un moyen simple de basculer entre les paramètres proxy/non-proxy lorsque je travaille à domicile?

80
supyo

sbt respecte les variables d'environnement habituelles pour les paramètres de proxy http:

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

( C'est bien sûr, sous Unix (Linux/OSX, etc.). Sous Windows, vous pouvez simplement définir la même variable d'environnement (%Java_OPTS%) comme d'habitude sous Windows. )

Puis lancez sbt comme d'habitude:

sbt

La commutation proxy/no-proxy doit consister à configurer un petit script que vous pouvez «insérer» chaque fois que vous en avez besoin.

Gotchas

  • N'incluez pas "http: //" dans la valeur yourserver
  • N'incluez pas le port dans la valeur yourserver
  • Vous voudrez probablement aussi inclure https.proxyHost et https.proxyPort car beaucoup de choses fonctionnent avec https
  • Si votre proxy requiert une authentification, n'essayez même pas, à moins d'utiliser une authentification de base, car SBT ne prend en charge rien d'autre. Aussi, méfiez-vous toujours des identifiants textos clairs dans les variables d'environnement! Assurez-vous de supprimer les commandes de votre .bash_history en utilisant une méthode d’édition de texte qui ne crée pas de fichiers de trace (techniquement, vous devriez shred ou srm tout le fichier). Si vous êtes sous Windows, ne vous inquiétez pas, votre sécurité est déjà foutue, vous ne pouvez plus faire de mal.
126
Faiz

sbt fonctionne de manière assez standard par rapport à la configuration habituelle des autres projets basés sur JVM.

sbt est en fait deux "sous-systèmes" - le lanceur et le noyau. C'est généralement xsbt.boot.Boot qui est exécuté avant que le noyau ne démarre avec les fonctionnalités que nous connaissons tous (et même certaines).

Il s’agit donc de savoir comment exécuter sbt et comment configurer un proxy pour le trafic réseau HTTP, HTTPS et FTP.

Vous trouverez ci-dessous la liste complète des propriétés disponibles pouvant être définies pour toute application Java, y compris sbt, demandant à l'API Java de router les communications via un proxy:

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

Remplacez http ci-dessus par https et ftp pour obtenir la liste des propriétés des services.

Certains scripts sbt utilisent Java_OPTS pour configurer les paramètres de proxy avec -Dhttp.proxyHost et -Dhttp.proxyPort parmi les autres (répertoriés ci-dessus). Voir Réseaux et procurations Java .

Certains scripts proposent leur propre méthode de configuration de la configuration du proxy à l'aide de la propriété SBT_OPTS, .sbtopts ou (uniquement sous Windows) %SBT_HOME%\conf\sbtconfig.txt. Vous pouvez les utiliser pour configurer spécifiquement sbt afin qu’il utilise des proxies alors que les autres applications basées sur JVM ne sont pas du tout affectées.

A partir de l'outil de ligne de commande 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)

Et voici un extrait de 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.

Soyez prudent avec sbtconfig.txt qui ne fonctionne que sous Windows uniquement. Lorsque vous utilisez cygwin, le fichier n'est pas consulté et vous devrez recourir aux autres méthodes.

J'utilise sbt avec le script suivant:

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

L’intérêt du script est d’utiliser la dernière version de sbt construite à partir des sources (c’est pourquoi j’utilise /Users/jacek/.ivy2/local/org.scala-sbt/sbt-launch/$SBT_LAUNCHER_VERSION-SNAPSHOT/jars/sbt-launch.jar) avec la propriété $SBT_OPTS comme moyen de transmettre les propriétés de la JVM à ses utilisations.

Le script ci-dessus me permet de définir le proxy sur la ligne de commande sous MacOS X comme suit:

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

Comme vous pouvez le constater, il existe de nombreuses approches pour définir un proxy pour sbt qui se résument toutes pour définir un proxy pour les utilisations sbt de la JVM.

25
Jacek Laskowski

Dans l'environnement Windows, ajoutez simplement la ligne suivante dans le fichier sbt/sbtconfig.txt

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

ou l'équivalent Https (grâce aux commentaires) 

-Dhttps.proxyHost=PROXYHOST 
-Dhttps.proxyPort=PROXYPORT 
-Dhttps.proxyUser=USERNAME 
-Dhttps.proxyPassword=XXXX
11
Enis

J'ai utilisé (c'est un environnement unix): 

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

Cela n'a pas fonctionné pour ma configuration: 

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

Dans le fichier sbt.sh: 

Java_OPTS          environment variable, if unset uses "$Java_opts"
SBT_OPTS           environment variable, if unset uses "$default_sbt_opts"

Mais apparemment, SBT_OPTS est utilisé à la place de Java_OPTS 

10
blue-sky

Pour les utilisateurs Windows, entrez la commande suivante:

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

Pour fournir une réponse qui fonctionnera pour tous les utilisateurs Windows: 

Ajoutez ce qui suit à votre 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

Remplacez les deuxXXXXXXXpar votre proxyHost et les deuxYYYYpar votre proxyPort. 

Si vous obtenez l'erreur "Impossible de trouver ou de charger la classe principale", vous devez définir votre Java_HOME: 

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

Sous Windows 64 bits, utilisez: 

Progra ~ 1 = 'Program Files' 

Progra ~ 2 = 'Program Files (x86)'

5
King Julian

Ajoutez les configurations http et 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"

(La configuration https est incontournable, car de nombreuses URL référencées par les bibliothèques sbt sont https)

En fait, j'ai même eu un paramètre supplémentaire 'http.proxySet' à 'true' dans les deux entrées de configuration. 

4
Parasouramane D

Lorsque j'ai ajouté les informations de proxy à% Java_OPTS%, j'ai reçu une erreur "-Dhttp.proxyHost = votre serveur était inattendu à ce moment-là". J'ai mis l'information de proxy dans% SBT_OPTS% et cela a fonctionné.

3
craigpfeifer

SBT utilise à la fois HTTP/HTTPS/SFTP/SSH et d'autres types de connexions à un référentiel. alors, quand derrière un proxy, ces protocoles devraient être disponibles. 

Dans la plupart des cas simples sous Windows, il vous suffit de transmettre des options de paramètres de proxy à la machine virtuelle Java, telles que:

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

Ça va faire.

Mais sinon, il y a peu de choses dont vous devriez être conscient:

  1. si vous établissez une connexion HTTPS au référentiel.
  2. si les certificats de coupe ont été importés dans jre cacerts
  3. si votre proxy remplacerait vos certificats de serveur

pour résoudre d’abord, vous devez passer le paramètre proxy https à jvm, comme ceci:

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

pour résoudre le second, vous devez importer le ca. il y a beaucoup de conseils.

pour résoudre le troisième problème, vous pourriez peut-être envisager d'utiliser un proxy d'authentification.

pour simplifier la configuration de SBT, fournissez sbtconfig.txt et sbtops dans le répertoire conf, examinez-le. 

Référence:
http://www.scala-sbt.org/0.13/docs/Setup-Notes.html
http://www.scala-sbt.org/1.0/docs/Publishing.html

2
Jin Wang

J'ai trouvé utile d'utiliser un élément de la section FAQ de Lightbend Activator. J'utilise Activator, qui à son tour utilise SBT; vous ne savez donc pas si cela aide les utilisateurs avec juste SBT, mais si vous utilisez Activator, comme moi, et que vous vous trouvez derrière un proxy, suivez les instructions de la section "Derrière un proxy" FAQ:

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

Juste au cas où le contenu disparaîtrait, voici un copier-coller:

Lors de l'exécution de l'activateur derrière un proxy, une configuration supplémentaire est nécessaire. Tout d’abord, ouvrez le fichier de configuration de l’activateur, trouvé dans votre fichier répertoire de base de l'utilisateur sous ~/.activator/activatorconfig.txt. Notez que ce fichier peut ne pas exister. Ajoutez les lignes suivantes (une option par ligne ):

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

En utilisant

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

fonctionne sous Ubuntu 15.10 x86_64 x86_64 GNU/Linux. 

Remplacez yourServer par l'adresse appropriée sans les préfixes http: // ni https: // dans Dhttp et Dhttps, respectivement. N'oubliez pas d'éviter les guillemets. Aucun usr/pass inclus dans la ligne de code, pour l'inclure, ajoutez simplement -Dhttp.proxyUser = usr -Dhttp.proxyPassword = pass avec les mêmes critères de frappe Merci @Jacek Laskowski! . À la vôtre

2
user278049

Sur Mac OS X/El Capitan, vous pouvez définir des variables d’environnement Java:

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

J'ai découvert que le démarrage d'IntelliJ IDEA depuis un terminal me permettait de me connecter et de télécharger par Internet. Pour partir du terminal, tapez:

$ idea

1
krozaine

Si vous utilisez un proxy qui nécessite une authentification, j'ai une solution pour vous :)

Comme @Faiz l'a expliqué ci-dessus, SBT a beaucoup de mal à gérer un proxy nécessitant une authentification. La solution consiste à contourner cette authentification, si vous ne pouvez pas désactiver votre proxy à la demande (proxy d'entreprise par exemple) . Pour ce faire, je vous suggère d'utiliser un proxy squid et de le configurer avec votre nom d'utilisateur et votre mot de passe pour accéder à votre compte. proxy d'entreprise. Voir: https://doc.ubuntu-fr.org/squid Vous pouvez ensuite définir les variables d'environnement Java_OPTS ou SBT_OPTS de sorte que SBT se connecte à votre propre proxy squid local au lieu de votre proxy d'entreprise:

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

(juste c/c ceci dans votre bashrc sans rien modifier et cela devrait fonctionner correctement).

Le truc, c'est que Squid Proxy ne nécessite aucune authentification et joue le rôle d'intermédiaire entre SBT et votre autre proxy.

Si vous rencontrez des difficultés pour appliquer ce conseil, faites-le moi savoir.

Cordialement,

Edgar

0
Edgar L.

Essayez de fournir les détails du proxy en tant que paramètres

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

Si cela ne fonctionne pas, essayez avec Java_OPTS (non Windows)

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

sbt compile

ou (fenêtres)

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

si rien ne fonctionne alors définissez SBT_OPTS

(non fenêtres)

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

ou (fenêtres)

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

Pour ceux qui n'arrivent toujours pas sur ce fil à essayer de trouver où/comment configurer un proxy HTTP dans IntelliJ, voici comment j'ai réussi à le faire fonctionner pour moi. J'espère que ça aide!

(Remarque: indiquez votre nom d'utilisateur et votre mot de passe réseau dans les cases correspondantes): -

 enter image description here 

0
Deej