<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://fallou.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://fallou.dev/" rel="alternate" type="text/html" hreflang="fr" /><updated>2026-09-23T14:14:13+02:00</updated><id>https://fallou.dev/feed.xml</id><title type="html">Serigne Fallou Diene</title><subtitle>Notes et retours d&apos;expérience d&apos;un développeur : Java, web, mobile et projets perso.
</subtitle><author><name>Serigne Fallou Diene</name></author><entry><title type="html">Spring pas SpringBoot :)</title><link href="https://fallou.dev/2026/09/23/Spring.html" rel="alternate" type="text/html" title="Spring pas SpringBoot :)" /><published>2026-09-23T00:00:00+02:00</published><updated>2026-09-23T00:00:00+02:00</updated><id>https://fallou.dev/2026/09/23/Spring</id><content type="html" xml:base="https://fallou.dev/2026/09/23/Spring.html"><![CDATA[<p>Dans cet article, nous allons voir la différence entre Spring et Spring Boot. et Non, c’est pas la même chose …
<!--more--></p>

<h2 id="quest-ce-que-spring">Qu’est-ce que Spring</h2>

<p>Pour être simple, Spring, c’est le framework de base. Il est composé de plusieurs fonctionnalités intéressantes comme l’injection de dépendances et des modules prets à l’emploi tels que :</p>
<ul>
  <li>Spring JDBC</li>
  <li>Spring MVC</li>
  <li>Spring Security</li>
  <li>Spring AOP</li>
  <li>Spring ORM</li>
  <li>Spring Test
Il est très puissant, mais il te laisse tout configurer toi même : déclarations des beans, configuration du DsipatcherServlet, du DataSource, choix et alignement des versions de chaque dépendances.</li>
</ul>

<h2 id="et-spring-boot-cest-quoi-">Et Spring Boot, c’est quoi ?</h2>

<p>Spring Boot, quant à lui, c’est une couche posée par dessus de Spring. Il ne remplace pas Spring car sous le capot, on a toujours ce dernier qui tourne. Donc son rôle, c’est de supprimer presque toute cette configuration manuelle grâce à trois mécanismes.</p>
<ul>
  <li>L’auto-configuration :</li>
</ul>

<h2 id="sous-le-capot">Sous le capot</h2>

<p>Le site est construit avec <a href="https://jekyllrb.com/">Jekyll</a> et le thème <a href="https://github.com/kitian616/jekyll-TeXt-theme">TeXt</a>, hébergé sur GitHub Pages. Le code source est disponible sur <a href="https://github.com/sfalloudiene/sfalloudiene.github.io">GitHub</a> si ça vous intéresse.</p>

<p>À bientôt pour le premier vrai article !</p>]]></content><author><name>Serigne Fallou Diene</name></author><category term="Java" /><category term="Spring" /><summary type="html"><![CDATA[Dans cet article, nous allons voir la différence entre Spring et Spring Boot. et Non, c’est pas la même chose …]]></summary></entry><entry><title type="html">Maven</title><link href="https://fallou.dev/2026/09/22/Maven.html" rel="alternate" type="text/html" title="Maven" /><published>2026-09-22T00:00:00+02:00</published><updated>2026-09-22T00:00:00+02:00</updated><id>https://fallou.dev/2026/09/22/Maven</id><content type="html" xml:base="https://fallou.dev/2026/09/22/Maven.html"><![CDATA[<p>Maven est l’outil de gestion de projet le plus utilisé dans l’écosystème Java.</p>

<!--more-->

<h2 id="quest-ce-que-maven-">Qu’est-ce que Maven ?</h2>

<p><strong>Maven</strong> est un outil de gestion de projet et de build pour Java (et les autres langages JVM comme Kotlin ou Scala). Il s’appuie sur un fichier de configuration unique, le <code class="language-plaintext highlighter-rouge">pom.xml</code>, qui décrit tout ce dont ton projet a besoin.</p>

<p>Son rôle :</p>

<ul>
  <li><strong>Compiler</strong> ton code source</li>
  <li><strong>Gérer automatiquement les dépendances</strong> (les bibliothèques externes dont ton projet a besoin)</li>
  <li><strong>Exécuter les tests</strong></li>
  <li><strong>Packager</strong> le projet (jar, war…)</li>
  <li><strong>Standardiser</strong> la structure des projets, pour que n’importe quel développeur Java s’y retrouve immédiatement</li>
</ul>

<p>En résumé, il automatise tout ce qui est répétitif dans un cycle de développement.</p>

<h2 id="pourquoi-lutiliser-">Pourquoi l’utiliser ?</h2>

<ul>
  <li>Plus besoin de télécharger les librairies à la main : Maven s’en charge</li>
  <li>Structure de projet standardisée, commune à tout l’écosystème Java</li>
  <li>Automatise builds, tests et packaging avec une seule commande</li>
  <li>Gère les conflits de versions entre dépendances (le fameux “jar hell”)</li>
  <li>S’intègre nativement dans les pipelines CI/CD (Jenkins, GitLab CI, GitHub Actions…)</li>
</ul>

<h2 id="structure-dun-projet-maven">Structure d’un projet Maven</h2>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mon-projet/
│
├── pom.xml             # fichier principal, la "recette" du build
└── src/
    ├── main/
    │   ├── java/       # code source
    │   └── resources/  # fichiers de configuration
    └── test/
        ├── java/       # tests unitaires
        └── resources/  # fichiers de test
</code></pre></div></div>

<ul>
  <li><code class="language-plaintext highlighter-rouge">pom.xml</code> : le cœur du projet — dépendances, plugins, métadonnées</li>
  <li><code class="language-plaintext highlighter-rouge">src/main/java</code> : ton code source</li>
  <li><code class="language-plaintext highlighter-rouge">src/test/java</code> : tes tests unitaires (JUnit, TestNG…)</li>
</ul>

<h2 id="un-pomxml-minimal">Un <code class="language-plaintext highlighter-rouge">pom.xml</code> minimal</h2>

<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;project</span> <span class="na">xmlns=</span><span class="s">"http://maven.apache.org/POM/4.0.0"</span><span class="nt">&gt;</span>
  <span class="nt">&lt;modelVersion&gt;</span>4.0.0<span class="nt">&lt;/modelVersion&gt;</span>

  <span class="nt">&lt;groupId&gt;</span>com.exemple<span class="nt">&lt;/groupId&gt;</span>
  <span class="nt">&lt;artifactId&gt;</span>mon-projet<span class="nt">&lt;/artifactId&gt;</span>
  <span class="nt">&lt;version&gt;</span>1.0-SNAPSHOT<span class="nt">&lt;/version&gt;</span>
  <span class="nt">&lt;packaging&gt;</span>jar<span class="nt">&lt;/packaging&gt;</span>

  <span class="nt">&lt;properties&gt;</span>
    <span class="nt">&lt;maven.compiler.source&gt;</span>17<span class="nt">&lt;/maven.compiler.source&gt;</span>
    <span class="nt">&lt;maven.compiler.target&gt;</span>17<span class="nt">&lt;/maven.compiler.target&gt;</span>
  <span class="nt">&lt;/properties&gt;</span>

  <span class="nt">&lt;dependencies&gt;</span>
    <span class="nt">&lt;dependency&gt;</span>
      <span class="nt">&lt;groupId&gt;</span>org.junit.jupiter<span class="nt">&lt;/groupId&gt;</span>
      <span class="nt">&lt;artifactId&gt;</span>junit-jupiter<span class="nt">&lt;/artifactId&gt;</span>
      <span class="nt">&lt;version&gt;</span>5.10.0<span class="nt">&lt;/version&gt;</span>
      <span class="nt">&lt;scope&gt;</span>test<span class="nt">&lt;/scope&gt;</span>
    <span class="nt">&lt;/dependency&gt;</span>
  <span class="nt">&lt;/dependencies&gt;</span>
<span class="nt">&lt;/project&gt;</span>
</code></pre></div></div>

<p>Les éléments clés :</p>

<ul>
  <li><strong>groupId</strong> : identifie ton organisation ou ton package (souvent le nom de domaine inversé, ex: <code class="language-plaintext highlighter-rouge">com.entreprise</code>)</li>
  <li><strong>artifactId</strong> : le nom du projet</li>
  <li><strong>version</strong> : la version courante (<code class="language-plaintext highlighter-rouge">SNAPSHOT</code> = en développement, pas encore figée)</li>
  <li><strong>packaging</strong> : le type de build produit (<code class="language-plaintext highlighter-rouge">jar</code>, <code class="language-plaintext highlighter-rouge">war</code>, <code class="language-plaintext highlighter-rouge">pom</code> pour un projet parent multi-modules…)</li>
  <li><strong>dependencies</strong> : les bibliothèques externes utilisées — Maven les télécharge automatiquement</li>
  <li><strong>plugins</strong> : des extensions pour automatiser des tâches supplémentaires (packaging avancé, génération de code, exécution de scripts…)</li>
  <li><strong>parent</strong> : permet d’hériter d’une configuration commune, très utile pour centraliser les versions dans plusieurs projets d’une même organisation</li>
</ul>

<h2 id="le-cycle-de-vie-maven">Le cycle de vie Maven</h2>

<p>Maven exécute les tâches selon un <strong>cycle de vie prédéfini</strong> : chaque phase déclenche automatiquement toutes celles qui la précèdent.</p>

<table>
  <thead>
    <tr>
      <th>Phase</th>
      <th>Rôle</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">validate</code></td>
      <td>Vérifie que le projet est correctement configuré</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">compile</code></td>
      <td>Compile le code source</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">test</code></td>
      <td>Exécute les tests unitaires</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">package</code></td>
      <td>Assemble le projet (jar, war…)</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">install</code></td>
      <td>Installe le build dans le dépôt local (<code class="language-plaintext highlighter-rouge">~/.m2</code>), pour qu’il soit utilisable par d’autres projets sur la machine</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">deploy</code></td>
      <td>Publie le build sur un dépôt distant (Nexus, Artifactory, Maven Central…)</td>
    </tr>
  </tbody>
</table>

<p>Lancer <code class="language-plaintext highlighter-rouge">mvn install</code> exécute donc automatiquement <code class="language-plaintext highlighter-rouge">validate</code>, <code class="language-plaintext highlighter-rouge">compile</code>, <code class="language-plaintext highlighter-rouge">test</code> et <code class="language-plaintext highlighter-rouge">package</code> avant lui.</p>

<h2 id="commandes-essentielles">Commandes essentielles</h2>

<table>
  <thead>
    <tr>
      <th>Commande</th>
      <th>Description</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">mvn clean</code></td>
      <td>Supprime les fichiers compilés (le dossier <code class="language-plaintext highlighter-rouge">target/</code>)</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">mvn compile</code></td>
      <td>Compile le code source</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">mvn test</code></td>
      <td>Exécute les tests unitaires</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">mvn package</code></td>
      <td>Crée le jar/war exécutable</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">mvn install</code></td>
      <td>Installe le projet dans le dépôt local</td>
    </tr>
    <tr>
      <td><code class="language-plaintext highlighter-rouge">mvn dependency:tree</code></td>
      <td>Affiche l’arbre complet des dépendances (utile pour traquer un conflit de versions)</td>
    </tr>
  </tbody>
</table>

<p>Une combinaison très courante avant de commit : <code class="language-plaintext highlighter-rouge">mvn clean install</code>, pour repartir d’un état propre.</p>

<h2 id="où-sont-stockées-les-dépendances-">Où sont stockées les dépendances ?</h2>

<p>Quand Maven télécharge une dépendance, il ne la retélécharge pas à chaque build : il la garde en cache dans le <strong>dépôt local</strong>, sur ta machine, dans <code class="language-plaintext highlighter-rouge">~/.m2/repository</code>. Si une dépendance manque en local, Maven va la chercher sur un <strong>dépôt distant</strong> — par défaut, <a href="https://central.sonatype.com/">Maven Central</a>.</p>

<p>Exemple d’ajout d’une dépendance :</p>

<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
    <span class="nt">&lt;groupId&gt;</span>org.apache.commons<span class="nt">&lt;/groupId&gt;</span>
    <span class="nt">&lt;artifactId&gt;</span>commons-lang3<span class="nt">&lt;/artifactId&gt;</span>
    <span class="nt">&lt;version&gt;</span>3.13.0<span class="nt">&lt;/version&gt;</span>
<span class="nt">&lt;/dependency&gt;</span>
</code></pre></div></div>

<p>Il suffit d’ajouter ce bloc dans <code class="language-plaintext highlighter-rouge">pom.xml</code> : Maven télécharge le jar et toutes ses propres dépendances (dépendances transitives) automatiquement.</p>

<h2 id="profils">Profils</h2>

<p>Les <strong>profils</strong> permettent de changer le comportement du build selon le contexte, sans toucher au reste du <code class="language-plaintext highlighter-rouge">pom.xml</code>. Exemples courants :</p>

<ul>
  <li>un profil <code class="language-plaintext highlighter-rouge">skip-tests</code> pour ignorer les tests lors d’un build rapide</li>
  <li>un profil par environnement (<code class="language-plaintext highlighter-rouge">dev</code>, <code class="language-plaintext highlighter-rouge">prod</code>) pour adapter la configuration de déploiement</li>
</ul>

<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;profiles&gt;</span>
  <span class="nt">&lt;profile&gt;</span>
    <span class="nt">&lt;id&gt;</span>skip-tests<span class="nt">&lt;/id&gt;</span>
    <span class="nt">&lt;properties&gt;</span>
      <span class="nt">&lt;maven.test.skip&gt;</span>true<span class="nt">&lt;/maven.test.skip&gt;</span>
    <span class="nt">&lt;/properties&gt;</span>
  <span class="nt">&lt;/profile&gt;</span>
<span class="nt">&lt;/profiles&gt;</span>
</code></pre></div></div>

<p>Activation : <code class="language-plaintext highlighter-rouge">mvn install -P skip-tests</code>.</p>

<h2 id="le-maven-wrapper-mvnw">Le Maven Wrapper (<code class="language-plaintext highlighter-rouge">mvnw</code>)</h2>

<p>Plutôt que de demander à chaque développeur d’installer Maven manuellement (et de risquer des versions différentes d’une machine à l’autre), la plupart des projets embarquent un <strong>Maven Wrapper</strong> : les scripts <code class="language-plaintext highlighter-rouge">mvnw</code> (Linux/Mac) et <code class="language-plaintext highlighter-rouge">mvnw.cmd</code> (Windows), à la racine du projet.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./mvnw clean <span class="nb">install</span>
</code></pre></div></div>

<p>Ça télécharge automatiquement la bonne version de Maven si besoin, et garantit que toute l’équipe (et la CI) utilise exactement la même version.</p>

<h2 id="snapshot-vs-release">SNAPSHOT vs RELEASE</h2>

<ul>
  <li><strong>SNAPSHOT</strong> : une version en développement, encore amenée à changer (<code class="language-plaintext highlighter-rouge">1.0-SNAPSHOT</code>). Maven la retélécharge à chaque build si elle vient d’un dépôt distant, pour rester à jour.</li>
  <li><strong>RELEASE</strong> : une version stable et figée (<code class="language-plaintext highlighter-rouge">1.0.0</code>), publiée une fois pour toutes — elle ne change plus jamais.</li>
</ul>

<h2 id="en-résumé">En résumé</h2>

<p>Le flux classique sur un projet Maven :</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mvn clean       <span class="c"># nettoyer</span>
mvn compile     <span class="c"># compiler</span>
mvn <span class="nb">test</span>        <span class="c"># tester</span>
mvn package     <span class="c"># créer le jar/war</span>
mvn <span class="nb">install</span>     <span class="c"># installer localement</span>
mvn deploy      <span class="c"># envoyer sur un dépôt distant (optionnel)</span>
</code></pre></div></div>

<p>Maven a un peu la réputation d’être verbeux (le XML n’aide pas), mais sa prévisibilité et la stabilité de son écosystème en font toujours un choix solide, notamment en entreprise. Si tu veux comparer avec une alternative plus moderne, Gradle mérite le détour — ce sera peut-être le sujet d’un prochain article.</p>]]></content><author><name>Serigne Fallou Diene</name></author><category term="Maven" /><category term="Java" /><summary type="html"><![CDATA[Maven est l’outil de gestion de projet le plus utilisé dans l’écosystème Java.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://fallou.dev/assets/images/maven.jpg" /><media:content medium="image" url="https://fallou.dev/assets/images/maven.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Bienvenue sur mon blog</title><link href="https://fallou.dev/2026/09/22/bienvenue-sur-mon-blog.html" rel="alternate" type="text/html" title="Bienvenue sur mon blog" /><published>2026-09-22T00:00:00+02:00</published><updated>2026-09-22T00:00:00+02:00</updated><id>https://fallou.dev/2026/09/22/bienvenue-sur-mon-blog</id><content type="html" xml:base="https://fallou.dev/2026/09/22/bienvenue-sur-mon-blog.html"><![CDATA[<p>Voilà, ce blog est en ligne. J’avais envie depuis un moment d’avoir un endroit à moi pour noter ce que j’apprends et partager mes projets, plutôt que de laisser ça dispersé entre des notes perso et des dépôts GitHub.</p>

<!--more-->

<h2 id="pourquoi-ce-blog">Pourquoi ce blog</h2>

<p>Au fil de mes projets (applications web, mobile, expérimentations diverses), j’accumule pas mal de retours d’expérience : des choix techniques qui ont payé, d’autres qui m’ont fait perdre du temps, des bugs tordus, des outils que je découvre. Ce blog va me servir à mettre tout ça au clair, et si ça peut aider quelqu’un d’autre au passage, tant mieux.</p>

<h2 id="ce-que-vous-trouverez-ici">Ce que vous trouverez ici</h2>

<ul>
  <li>Des retours sur mes projets, du démarrage jusqu’aux problèmes rencontrés en cours de route</li>
  <li>Des notes techniques sur des sujets que j’explore (Java, web, mobile, outils de dev)</li>
  <li>Probablement quelques articles plus personnels sur mon parcours</li>
</ul>

<h2 id="sous-le-capot">Sous le capot</h2>

<p>Le site est construit avec <a href="https://jekyllrb.com/">Jekyll</a> et le thème <a href="https://github.com/kitian616/jekyll-TeXt-theme">TeXt</a>, hébergé sur GitHub Pages. Le code source est disponible sur <a href="https://github.com/sfalloudiene/sfalloudiene.github.io">GitHub</a> si ça vous intéresse.</p>

<p>À bientôt pour le premier vrai article !</p>]]></content><author><name>Serigne Fallou Diene</name></author><category term="Annonce" /><summary type="html"><![CDATA[Voilà, ce blog est en ligne. J’avais envie depuis un moment d’avoir un endroit à moi pour noter ce que j’apprends et partager mes projets, plutôt que de laisser ça dispersé entre des notes perso et des dépôts GitHub.]]></summary></entry></feed>