Comment utiliser sbt derrière un proxy?

85

Comment configurer sbt pour utiliser un proxy?

Par exemple, mes besoins de construction définition de se connecter à GitHub, en spécifiant les paramètres de connexion http.proxy, http.proxyPort, useret password.

Comment passerais-je ces paramètres à sbt?

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

supyo
la source

Réponses:

135

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

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

( C'est bien sûr, en supposant Unix (Linux / OSX, etc.). Sous Windows, vous pouvez simplement définir la même variable d'environnement ( %JAVA_OPTS%) comme d'habitude à la manière de Windows. )

Puis exécutez sbtcomme d'habitude:

sbt

Le basculement entre proxy / non-proxy devrait être une question de mise en place d'un petit script dans lequel vous pouvez «glisser» chaque fois que vous en avez besoin.

Gotchas

  • N'incluez pas "http: //" dans la yourservervaleur
  • N'incluez pas le port dans la yourservervaleur
  • Vous voulez probablement aussi inclure https.proxyHostet https.proxyPortcomme beaucoup de choses fonctionnent sur https
  • Si votre proxy nécessite une authentification, ne prenez même pas la peine d'essayer sauf s'il utilise simplement l'authentification de base car SBT ne prend en charge rien d'autre. Méfiez-vous également toujours des informations d'identification claires 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éera pas de fichiers de trace (techniquement, vous devriez shredou srmle fichier entier). Si vous êtes sous Windows, ne vous inquiétez pas, votre sécurité est déjà en panne, vous ne pouvez plus nuire.
Faiz
la source
1
Merci, c'est la bonne réponse. Il s'avère que mon vrai problème est que mon proxy bloque les ports utilisés par GIT, je dois donc utiliser le protocole http.
supyo
4
+1 Cependant, sur Windows 7, à partir de l'invite de commande, j'ai dû utiliser set JAVA_OPTS=-Dhttp.proxyHost=yourserver -Dhttp.proxyPort=8080 -Dhttp.proxyUser=username -Dhttp.proxyPassword=passwordpour que cela fonctionne.
HeatfanJohn
4
Cela ne fonctionne pas pour moi, je continue à recevoir "Votre proxy nécessite une authentification" et il ne parvient pas à dl deps. Je suis derrière un héritage NTLM :(
samthebest
6
Après avoir compris - j'ai réalisé que dans mon cas, je DOIS utiliser le paramètre système HTTPS java -Dhttps.proxyHost et -Dhttps.proxyPort!
Conny Kreyßel
1
Dans le cas où vous êtes derrière un NTLM hérité, je recommande d'utiliser CNTLM, cela fonctionne pour moi
Elouan Keryell-Even
25

sbt fonctionne de manière assez standard par rapport à la façon dont les autres projets basés sur JVM sont généralement configurés.

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

Il s'agit donc de savoir comment vous exécutez sbt qui indique comment configurer un proxy pour le trafic réseau HTTP, HTTPS et FTP.

Voici la liste complète des propriétés disponibles qui peuvent être définies pour toute application Java, y compris sbt, qui indiquent à l'API Java d'acheminer la communication via un proxy:

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

Remplacez httpci-dessus par httpset ftppour obtenir la liste des propriétés des services.

Certains sbtscripts utilisent JAVA_OPTSpour configurer les paramètres de proxy avec -Dhttp.proxyHostet -Dhttp.proxyPortparmi les autres (répertoriés ci-dessus). Voir Mise en réseau Java et proxies .

Certains scripts ont leur propre façon de configurer la configuration du proxy à l'aide de la SBT_OPTSpropriété, .sbtoptsou (uniquement sous Windows) %SBT_HOME%\conf\sbtconfig.txt. Vous pouvez les utiliser pour définir spécifiquement sbt pour utiliser des proxys alors que les autres applications basées sur JVM ne sont pas du tout affectées.

Depuis l' sbtoutil de ligne de commande:

# 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.txtce que seulement fonctionne sur Windows uniquement . Lorsque vous utilisez cygwinle fichier n'est pas consulté et vous devrez recourir aux autres approches.

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 "$@"

Le but 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 $SBT_OPTSpropriété comme moyen de transmettre les propriétés JVM aux utilisations de la JVM sbt.

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 voir, il existe de nombreuses approches pour définir un proxy pour sbt qui se résument toutes à définir un proxy pour les utilisations de la JVM sbt.

Jacek Laskowski
la source
13

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
Enis
la source
3
Cela a fonctionné pour moi tant que j'ai également ajouté une autre ligne dans sbtconfig.txt avec les propriétés équivalentes https . J'ai utilisé exactement les mêmes valeurs que pour les propriétés http correspondantes. Ainsi: -Dhttps.proxyHost = PROXYHOST -Dhttps.proxyPort = PROXYPORT -Dhttps.proxyUser = USERNAME -Dhttps.proxyPassword = XXXX
snark
4
REMARQUE IMPORTANTE: ne fonctionne plus! Vous devez utiliser le sbt/conf/sbtoptsfichier à la place.
asachet le
@ antoine-sac où puis-je trouver le sbt/conf/sbtoptsfichier pour définir le proxy?
krozaine
1
@krozaine dans le répertoire d'installation de sbt - le mien était sous C:\Program Files (x86)\sbt\conf\sbtopts- sous Windows évidemment.
asachet
@ antoine-sac il semble fonctionner pour moi sans toucher au sbtoptsfichier
enissay
12

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

ciel bleu
la source
Je ne trouve pas sur Internet où dois-je placer le sbt.shfichier dans mon projet!
hadilq le
La variable SBT_OPTS ENV était la seule chose qui l'a fait fonctionner pour moi sur CentOS
Icarus
9

Pour les utilisateurs Windows, entrez la commande suivante:

set JAVA_OPTS=-Dhttp.proxySet=true -Dhttp.proxyHost=[Your Proxy server] -Dhttp.proxyPort=8080
rphonika
la source
3
Dans mon cas, j'ai également dû ajouter des paramètres pour https ... codeset JAVA_OPTS = -Dhttp.proxySet = true -Dhttp.proxyHost = <Proxy Server> -Dhttp.proxyPort = <Port> -Dhttp.proxyUser = <Username> - Dht tp.proxyPassword = <Password> -Dhttps.proxySet = true -Dhttps.proxyHost = <Proxy Server> -Dhttps.proxyPort = <Port> -Dhttps.proxyUser = <Username> -Dhttp s.proxyPassword = <Password>code
Arun
6

Pour fournir une réponse qui fonctionnera pour tous les utilisateurs de 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 à la fois XXXXXXX par votre proxyHost et les deux YYYY par 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 = 'Fichiers programme'

Progra ~ 2 = 'Program Files (x86)'

JayL
la source
4

Ajoutez à la fois la configuration 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 indispensable, car de nombreuses URL référencées par les bibliothèques sbt sont https)

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

Parasouramane D
la source
3

Quand j'ai ajouté les informations de proxy au% JAVA_OPTS%, j'ai eu une erreur "-Dhttp.proxyHost = votre serveur était inattendu à ce moment". J'ai mis les informations de proxy dans% SBT_OPTS% et cela a fonctionné.

craigpfeifer
la source
6
Sur Windows, j'ai eu la même erreur, mais la configuration de SBT_OPTS a corrigé l'erreur mais n'a pas défini le proxy. La solution était de définir JAVA_OPTS ou SBT_OPTS mais sans les guillemets autour de la valeur.
pgras
2

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 votre serveur par la bonne adresse 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 inclure cela, ajoutez simplement -Dhttp.proxyUser = usr -Dhttp.proxyPassword = pass avec les mêmes critères de saisie. Merci @Jacek Laskowski !. À votre santé

user278049
la source
nulle part, c'est la ligne de commande propre pour copier et coller rapidement, juste ce type @mad!
user278049
2

J'ai trouvé un élément utile dans la section FAQ de Lightbend Activator. J'utilise Activator, qui à son tour utilise SBT, donc je ne sais pas si cela aide les utilisateurs uniquement avec SBT, mais si vous utilisez Activator, comme moi, et que vous êtes derrière un proxy, suivez les instructions de la section "Derrière un proxy" du 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, qui se trouve dans le répertoire personnel de votre 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"
Peter Perháč
la source
2

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

Dans la plupart des cas simples sous Windows, il vous suffit de transmettre les options de paramètres proxy à la JVM, comme:

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

Cela fera l'affaire.

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

  1. si vous établissez une connexion HTTPS au référentiel.
  2. si les certificats de serveur 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:

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

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

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

pour simplifier la configuration de SBT, il fournit sbtconfig.txt et sbtops dans le répertoire conf, regardez-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

Jin Wang
la source
quel type de message d'erreur obtenez-vous lorsqu'il s'agit d'un problème de certificat? Lorsque j'utilise les propriétés http, je reçois un message clair disant que je suis probablement derrière un proxy, etc. Lorsque je passe aux propriétés httpS, je n'ai plus le message, donc je suppose que c'est mieux ... mais j'ai des problèmes comme décrit ici: stackoverflow.com/questions/43464585/…
Vincent F
1

Sous 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"
Adrian
la source
1

J'ai trouvé que démarrer IntelliJ IDEA à partir du terminal me permettait de me connecter et de télécharger sur Internet. Pour démarrer à partir du terminal, saisissez:

$ idea

krozaine
la source
0

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 le proxy nécessitant une authentification. La solution est de 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 proxy d'entreprise. Voir: https://doc.ubuntu-fr.org/squid Ensuite, vous pouvez définir les variables d'environnement JAVA_OPTS ou SBT_OPTS afin 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"

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

L'astuce est que Squid Proxy ne nécessite aucune authentification et agit comme intermédiaire entre SBT et votre autre proxy.

Si vous rencontrez des difficultés lors de l’application de ces conseils, veuillez me le faire savoir.

Cordialement,

Edgar

Edgar L.
la source
0

Pour ceux qui atterrissent toujours sur ce fil essayant de trouver où / comment configurer le 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): -

entrez la description de l'image ici

Deej
la source
0

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 (windows)

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

si rien ne fonctionne, définissez SBT_OPTS

(non windows)

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

ou (windows)

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