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?
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.
yourserver
yourserver
https.proxyHost
et https.proxyPort
car beaucoup de choses fonctionnent avec httpsshred
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.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:
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.
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
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
Pour les utilisateurs Windows, entrez la commande suivante:
set Java_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080
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)'
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.
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é.
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:
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
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"
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
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"
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
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
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
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): -