<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Scala on Jean-Christophe Gay</title><link>https://jeanchristophegay.com/categories/scala/</link><description>Recent content in Scala on Jean-Christophe Gay</description><generator>Hugo -- gohugo.io</generator><language>fr-FR</language><copyright>© 2026 Jean-Christophe Gay</copyright><lastBuildDate>Tue, 18 Aug 2026 23:08:47 +0200</lastBuildDate><atom:link href="https://jeanchristophegay.com/categories/scala/index.xml" rel="self" type="application/rss+xml"/><item><title>Configurer Idea pour développer en Scala sous OS X</title><link>https://jeanchristophegay.com/posts/configurer-idea-pour-developper-en-scala-sous-os-x/</link><pubDate>Sun, 13 Oct 2013 10:59:00 +0200</pubDate><guid>https://jeanchristophegay.com/posts/configurer-idea-pour-developper-en-scala-sous-os-x/</guid><description>&lt;p&gt;Mini guide pour démarrer son environnement de développement &lt;a href="http://www.scala-lang.org/" target="_blank" rel="noreferrer"&gt;Scala&lt;/a&gt; pour &lt;a href="http://www.jetbrains.com/idea/" target="_blank" rel="noreferrer"&gt;IntelliJ Idea&lt;/a&gt; sous OS X.&lt;/p&gt;

&lt;h1 class="relative group"&gt;Installation SBT et Scala
 &lt;div id="installation-sbt-et-scala" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#installation-sbt-et-scala" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;Avec le gestionnaire de paquet &lt;a href="http://brew.sh/index_fr.html" target="_blank" rel="noreferrer"&gt;Homebrew&lt;/a&gt; :&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install scala --with-docs 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;brew install sbt &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Pour passer des options supplémentaires à la JVM lors de l&amp;rsquo;utilisation de SBT, celà se passe via &lt;code&gt;$SBT_OPTS&lt;/code&gt; ou dans le fichier &lt;code&gt;~/.sbtconfig&lt;/code&gt;.
Utiliser les paramètres &lt;code&gt;&amp;quot;-XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M&amp;quot;&lt;/code&gt; pour commencer.&lt;/p&gt;

&lt;h1 class="relative group"&gt;Configuration IntelliJ Idea
 &lt;div id="configuration-intellij-idea" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#configuration-intellij-idea" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;Direction la gestion des plugins et installer le &lt;a href="http://confluence.jetbrains.com/display/SCA/Scala&amp;#43;Plugin&amp;#43;for&amp;#43;IntelliJ&amp;#43;IDEA" target="_blank" rel="noreferrer"&gt;plugin Scala&lt;/a&gt; disponible dans les plugins maintenus par JetBrains.&lt;br&gt;
Le reste de la configuration se déroulera lors de la première création d&amp;rsquo;un projet.&lt;/p&gt;

&lt;h1 class="relative group"&gt;Création d&amp;rsquo;un projet (à la main)
 &lt;div id="création-dun-projet-à-la-main" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#cr%c3%a9ation-dun-projet-%c3%a0-la-main" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;Dans Idea, &lt;code&gt;Create New Project&lt;/code&gt; puis choisir &lt;code&gt;Scala Module&lt;/code&gt; :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Choisir un nom de projet&lt;/li&gt;
&lt;li&gt;Utiliser &lt;code&gt;/usr/local/opt/scala/idea&lt;/code&gt; en tant que &lt;code&gt;Scala Home&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Cocher &lt;code&gt;Make global libraries&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="https://jeanchristophegay.com/images/scala-new-project.png" &gt;&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="low"
 alt="scala-new-project"
 src="https://jeanchristophegay.com/images/scala-new-project.png"
 width="1052"
 height="853"&gt;&lt;/figure&gt;
&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Le projet est prêt !&lt;/p&gt;
&lt;p&gt;Les avertissements ne sont pas activés par défaut à la compilation, l&amp;rsquo;IDE vous prévient quand même qu&amp;rsquo;il faut activer certaines options pour avoir le détail des avertissements avec des messages de type : &lt;code&gt;scala: there were 1 feature warning(s); re-run with -feature for details&lt;/code&gt;&lt;br&gt;
Il suffit d&amp;rsquo;aller les options du projet, &lt;code&gt;Open module settings&lt;/code&gt; &amp;gt; &lt;code&gt;Facets&lt;/code&gt; &amp;gt; &lt;code&gt;Scala&lt;/code&gt; et de cocher les avertissements désirés ou de spécifier l&amp;rsquo;option voulu dans le champ &lt;code&gt;Additional compiler options&lt;/code&gt;.&lt;/p&gt;

&lt;h1 class="relative group"&gt;Création d&amp;rsquo;un projet (SBT)
 &lt;div id="création-dun-projet-sbt" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#cr%c3%a9ation-dun-projet-sbt" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;

&lt;h2 class="relative group"&gt;Structure du build
 &lt;div id="structure-du-build" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#structure-du-build" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;La structure d&amp;rsquo;un projet est assez classique pour un langage de la JVM : &lt;code&gt;mkdir -p src/{main,test}/{scala,java,resources}&lt;/code&gt;&lt;br&gt;
L&amp;rsquo;outil de build majeur dans l&amp;rsquo;univers scala est &lt;a href="http://www.scala-sbt.org/" target="_blank" rel="noreferrer"&gt;SBT&lt;/a&gt;, le descripteur du projet prend la forme d&amp;rsquo;un fichier &lt;code&gt;build.sbt&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;scalaVersion := &amp;quot;2.10.3&amp;quot;

name := &amp;quot;mon-projet-scala&amp;quot;

version := &amp;quot;1.0&amp;quot;

scalacOptions ++= Seq(&amp;quot;-unchecked&amp;quot;, &amp;quot;-deprecation&amp;quot;, &amp;quot;-feature&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Les options ajoutées à &lt;code&gt;scalac&lt;/code&gt; permettent d&amp;rsquo;afficher les avertissements les plus courants lors de la compilation.&lt;br&gt;
Les lignes vides ne sont pas une blague, c&amp;rsquo;est vraiment nécessaire à SBT pour détecter la fin d&amp;rsquo;une propriété de configuration…&lt;/p&gt;

&lt;h2 class="relative group"&gt;Génération des fichiers projets IntelliJ Idea
 &lt;div id="génération-des-fichiers-projets-intellij-idea" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#g%c3%a9n%c3%a9ration-des-fichiers-projets-intellij-idea" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Dans sa version actuelle (12.1.6), Idea n&amp;rsquo;intègre pas encore SBT, on ne peut donc pas importer un projet à partir de son descripteur de build comme il est possible de le faire avec Maven ou Gradle.&lt;br&gt;
Il faut donc générer la configuration du projet à l&amp;rsquo;aide du plugin &lt;a href="https://github.com/mpeltonen/sbt-idea" target="_blank" rel="noreferrer"&gt;sbt-idea&lt;/a&gt;.&lt;br&gt;
Créer le fichier &lt;code&gt;~/.sbt/0.13/plugins/build.sbt&lt;/code&gt; pour déclarer le plugin de manière globale. Le plugin sera utilisable sur tous les projets sans devoir le déclarer dans chaque &lt;code&gt;build.sbt&lt;/code&gt;. &lt;code&gt;0.13&lt;/code&gt; correspondant à la version de SBT utilisée, ajouter :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;addSbtPlugin(&amp;quot;com.github.mpeltonen&amp;quot; % &amp;quot;sbt-idea&amp;quot; % &amp;quot;1.5.1&amp;quot;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;A la racine du projet exécuter &lt;code&gt;sbt gen-idea&lt;/code&gt; pour générer toute la configuration.&lt;/p&gt;
&lt;p&gt;Le projet peut maintenant est ouvert dans IntelliJ Idea.&lt;/p&gt;
&lt;p&gt;Il se peut que le compilateur scala soit configuré un peu n&amp;rsquo;importe comment, dans ce cas il faut aller dans les options du projet pour sélectionner un &lt;code&gt;compiler library&lt;/code&gt; correct (celui créer en tant que &lt;code&gt;global library&lt;/code&gt; par exemple) et supprimer ceux qui sont incorrects.&lt;/p&gt;

&lt;h1 class="relative group"&gt;Mais, ça ne fonctionne pas les scripts ?!
 &lt;div id="mais-ça-ne-fonctionne-pas-les-scripts-" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#mais-%c3%a7a-ne-fonctionne-pas-les-scripts-" aria-label="Ancre"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;Tous les exemples présentés pour apprendre le langage sont souvent des scripts.&lt;br&gt;
Si vos scripts sont écrits dans des fichiers &lt;code&gt;.scala&lt;/code&gt;, Idea essaie de les compiler et échoue :&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;expected class or object definition
println(&amp;quot;hello world&amp;quot;)
^
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;La solution consiste à renommer le script avec l&amp;rsquo;extension &lt;code&gt;.sc&lt;/code&gt;, ce qui le transforme en &lt;code&gt;scala worksheet&lt;/code&gt; (&lt;a href="http://devnet.jetbrains.com/thread/441385" target="_blank" rel="noreferrer"&gt;source&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Et voilà !&lt;/p&gt;</description></item></channel></rss>