<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Archives des spring - ji-ka</title>
	<atom:link href="https://www.ji-ka.tn/spring/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.ji-ka.tn/spring/</link>
	<description></description>
	<lastBuildDate>Sat, 14 Dec 2024 12:06:11 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.2</generator>

<image>
	<url>https://www.ji-ka.tn/wp-content/uploads/2023/10/cropped-icon-32x32.png</url>
	<title>Archives des spring - ji-ka</title>
	<link>https://www.ji-ka.tn/spring/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Développer un Plugin Maven</title>
		<link>https://www.ji-ka.tn/create-maven-plugin/</link>
		
		<dc:creator><![CDATA[Jihed Kaouech]]></dc:creator>
		<pubDate>Sat, 14 Dec 2024 12:01:55 +0000</pubDate>
				<category><![CDATA[spring]]></category>
		<category><![CDATA[actuator]]></category>
		<category><![CDATA[maven]]></category>
		<guid isPermaLink="false">https://www.ji-ka.tn/?p=1199</guid>

					<description><![CDATA[<p>Maven est un outil puissant d&#8217;automatisation de la construction utilisé principalement pour les projets Java. Une caractéristique clé de Maven est son extensibilité via des plugins, qui permettent de personnaliser et d&#8217;améliorer le processus de construction. Dans ce guide, vous apprendrez à créer un plugin Maven personnalisé. Prérequis Avant de commencer, assurez-vous d&#8217;avoir : Étape [&#8230;]</p>
<p>L’article <a href="https://www.ji-ka.tn/create-maven-plugin/">Développer un Plugin Maven</a> est apparu en premier sur <a href="https://www.ji-ka.tn">ji-ka</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Maven est un outil puissant d&rsquo;automatisation de la construction utilisé principalement pour les projets Java. Une caractéristique clé de Maven est son extensibilité via des plugins, qui permettent de personnaliser et d&rsquo;améliorer le processus de construction. Dans ce guide, vous apprendrez à créer un plugin Maven personnalisé.</p>



<span id="more-1199"></span>



<h2 class="wp-block-heading">Prérequis</h2>



<p>Avant de commencer, assurez-vous d&rsquo;avoir :</p>



<ul class="wp-block-list">
<li><strong>Java Development Kit (JDK)</strong> installé.</li>



<li><strong>Apache Maven</strong> installé et configuré.</li>



<li>Une connaissance de base des concepts Java et Maven.</li>
</ul>



<h2 class="wp-block-heading">Étape 1 : Configurer le Projet du Plugin</h2>



<p>Pour créer un plugin Maven, commencez par configurer un nouveau projet Maven :</p>



<ol class="wp-block-list">
<li>Ouvrez un terminal ou un IDE et exécutez la commande suivante pour créer une structure de projet :</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(1 * 0.6 * 1.125rem);line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="mvn archetype:generate -DgroupId=com.exemple -DartifactId=my-plugin -DarchetypeArtifactId=maven-archetype-plugin -DinteractiveMode=false" style="color:#E6E6E6;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-dark" style="background-color: #222222" tabindex="0"><code><span class="line"><span style="color: #E6E6E6">mvn archetype:generate </span><span style="color: #D4D4D4">-</span><span style="color: #E6E6E6">DgroupId</span><span style="color: #D4D4D4">=</span><span style="color: #E6E6E6">com.exemple </span><span style="color: #D4D4D4">-</span><span style="color: #E6E6E6">DartifactId</span><span style="color: #D4D4D4">=</span><span style="color: #E6E6E6">my</span><span style="color: #D4D4D4">-</span><span style="color: #E6E6E6">plugin </span><span style="color: #D4D4D4">-</span><span style="color: #E6E6E6">DarchetypeArtifactId</span><span style="color: #D4D4D4">=</span><span style="color: #E6E6E6">maven</span><span style="color: #D4D4D4">-</span><span style="color: #E6E6E6">archetype</span><span style="color: #D4D4D4">-</span><span style="color: #E6E6E6">plugin </span><span style="color: #D4D4D4">-</span><span style="color: #E6E6E6">DinteractiveMode</span><span style="color: #D4D4D4">=</span><span style="color: #E6E6E6">false</span></span></code></pre></div>



<p></p>



<p>Cette commande utilise l&rsquo;archétype de plugin Maven pour générer une structure de base pour votre plugin.</p>



<ol start="2" class="wp-block-list">
<li>Accédez au répertoire du projet généré</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="cd my-plugin" style="color:#E6E6E6;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-dark" style="background-color: #222222" tabindex="0"><code><span class="line"><span style="color: #E6E6E6">cd my</span><span style="color: #D4D4D4">-</span><span style="color: #E6E6E6">plugin</span></span></code></pre></div>



<p></p>



<h2 class="wp-block-heading">Étape 2 : Implémenter la Logique du Plugin</h2>



<ol class="wp-block-list">
<li>Localisez la classe principale du plugin sous <code>src/main/java/com/example/MyMojo.java</code>. Cette classe est annotée avec <code>@Mojo</code> et sert de point d&rsquo;entrée pour votre plugin.</li>
</ol>



<ol start="2" class="wp-block-list">
<li>Modifiez la classe <code>MyMojo</code> pour implémenter la fonctionnalité souhaitée. Par exemple :</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="package com.example;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

@Mojo(name = &quot;generatefile&quot;)
public class MyMojo extends AbstractMojo {

    @Parameter(property = &quot;outputDir&quot;, defaultValue = &quot;${project.build.directory}&quot;)
    private File outputDir;

    @Parameter(property = &quot;filename&quot;, defaultValue = &quot;output.txt&quot;)
    private String filename;

    @Parameter(property = &quot;content&quot;, defaultValue = &quot;Hello, Maven Plugin!&quot;)
    private String content;

    public void execute() throws MojoExecutionException {
        File outputFile = new File(outputDir, filename);
        try {
            if (!outputDir.exists()) {
                outputDir.mkdirs();
            }
            try (FileWriter writer = new FileWriter(outputFile)) {
                writer.write(content);
            }
            getLog().info(&quot;Fichier généré à : &quot; + outputFile.getAbsolutePath());
        } catch (IOException e) {
            throw new MojoExecutionException(&quot;Erreur lors de la génération du fichier&quot;, e);
        }
    }
}" style="color:#E6E6E6;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-dark" style="background-color: #222222" tabindex="0"><code><span class="line"><span style="color: #569CD6">package</span><span style="color: #E6E6E6"> </span><span style="color: #D4D4D4">com.example</span><span style="color: #E6E6E6">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #569CD6">import</span><span style="color: #E6E6E6"> </span><span style="color: #D4D4D4">org.apache.maven.plugin.AbstractMojo</span><span style="color: #E6E6E6">;</span></span>
<span class="line"><span style="color: #569CD6">import</span><span style="color: #E6E6E6"> </span><span style="color: #D4D4D4">org.apache.maven.plugin.MojoExecutionException</span><span style="color: #E6E6E6">;</span></span>
<span class="line"><span style="color: #569CD6">import</span><span style="color: #E6E6E6"> </span><span style="color: #D4D4D4">org.apache.maven.plugins.annotations.Mojo</span><span style="color: #E6E6E6">;</span></span>
<span class="line"><span style="color: #569CD6">import</span><span style="color: #E6E6E6"> </span><span style="color: #D4D4D4">org.apache.maven.plugins.annotations.Parameter</span><span style="color: #E6E6E6">;</span></span>
<span class="line"><span style="color: #569CD6">import</span><span style="color: #E6E6E6"> </span><span style="color: #D4D4D4">java.io.File</span><span style="color: #E6E6E6">;</span></span>
<span class="line"><span style="color: #569CD6">import</span><span style="color: #E6E6E6"> </span><span style="color: #D4D4D4">java.io.FileWriter</span><span style="color: #E6E6E6">;</span></span>
<span class="line"><span style="color: #569CD6">import</span><span style="color: #E6E6E6"> </span><span style="color: #D4D4D4">java.io.IOException</span><span style="color: #E6E6E6">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E6E6E6">@</span><span style="color: #4EC9B0">Mojo</span><span style="color: #E6E6E6">(name </span><span style="color: #D4D4D4">=</span><span style="color: #E6E6E6"> </span><span style="color: #CE9178">&quot;generatefile&quot;</span><span style="color: #E6E6E6">)</span></span>
<span class="line"><span style="color: #569CD6">public</span><span style="color: #E6E6E6"> </span><span style="color: #569CD6">class</span><span style="color: #E6E6E6"> </span><span style="color: #4EC9B0">MyMojo</span><span style="color: #E6E6E6"> </span><span style="color: #569CD6">extends</span><span style="color: #E6E6E6"> </span><span style="color: #4EC9B0">AbstractMojo</span><span style="color: #E6E6E6"> {</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E6E6E6">    @</span><span style="color: #4EC9B0">Parameter</span><span style="color: #E6E6E6">(property </span><span style="color: #D4D4D4">=</span><span style="color: #E6E6E6"> </span><span style="color: #CE9178">&quot;outputDir&quot;</span><span style="color: #E6E6E6">, defaultValue </span><span style="color: #D4D4D4">=</span><span style="color: #E6E6E6"> </span><span style="color: #CE9178">&quot;${project.build.directory}&quot;</span><span style="color: #E6E6E6">)</span></span>
<span class="line"><span style="color: #E6E6E6">    </span><span style="color: #569CD6">private</span><span style="color: #E6E6E6"> </span><span style="color: #4EC9B0">File</span><span style="color: #E6E6E6"> </span><span style="color: #9CDCFE">outputDir</span><span style="color: #E6E6E6">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E6E6E6">    @</span><span style="color: #4EC9B0">Parameter</span><span style="color: #E6E6E6">(property </span><span style="color: #D4D4D4">=</span><span style="color: #E6E6E6"> </span><span style="color: #CE9178">&quot;filename&quot;</span><span style="color: #E6E6E6">, defaultValue </span><span style="color: #D4D4D4">=</span><span style="color: #E6E6E6"> </span><span style="color: #CE9178">&quot;output.txt&quot;</span><span style="color: #E6E6E6">)</span></span>
<span class="line"><span style="color: #E6E6E6">    </span><span style="color: #569CD6">private</span><span style="color: #E6E6E6"> </span><span style="color: #4EC9B0">String</span><span style="color: #E6E6E6"> </span><span style="color: #9CDCFE">filename</span><span style="color: #E6E6E6">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E6E6E6">    @</span><span style="color: #4EC9B0">Parameter</span><span style="color: #E6E6E6">(property </span><span style="color: #D4D4D4">=</span><span style="color: #E6E6E6"> </span><span style="color: #CE9178">&quot;content&quot;</span><span style="color: #E6E6E6">, defaultValue </span><span style="color: #D4D4D4">=</span><span style="color: #E6E6E6"> </span><span style="color: #CE9178">&quot;Hello, Maven Plugin!&quot;</span><span style="color: #E6E6E6">)</span></span>
<span class="line"><span style="color: #E6E6E6">    </span><span style="color: #569CD6">private</span><span style="color: #E6E6E6"> </span><span style="color: #4EC9B0">String</span><span style="color: #E6E6E6"> </span><span style="color: #9CDCFE">content</span><span style="color: #E6E6E6">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #E6E6E6">    </span><span style="color: #569CD6">public</span><span style="color: #E6E6E6"> </span><span style="color: #4EC9B0">void</span><span style="color: #E6E6E6"> </span><span style="color: #DCDCAA">execute</span><span style="color: #E6E6E6">() </span><span style="color: #569CD6">throws</span><span style="color: #E6E6E6"> </span><span style="color: #4EC9B0">MojoExecutionException</span><span style="color: #E6E6E6"> {</span></span>
<span class="line"><span style="color: #E6E6E6">        </span><span style="color: #4EC9B0">File</span><span style="color: #E6E6E6"> </span><span style="color: #9CDCFE">outputFile</span><span style="color: #E6E6E6"> </span><span style="color: #D4D4D4">=</span><span style="color: #E6E6E6"> </span><span style="color: #C586C0">new</span><span style="color: #E6E6E6"> </span><span style="color: #DCDCAA">File</span><span style="color: #E6E6E6">(outputDir, filename);</span></span>
<span class="line"><span style="color: #E6E6E6">        </span><span style="color: #C586C0">try</span><span style="color: #E6E6E6"> {</span></span>
<span class="line"><span style="color: #E6E6E6">            </span><span style="color: #C586C0">if</span><span style="color: #E6E6E6"> (</span><span style="color: #D4D4D4">!</span><span style="color: #9CDCFE">outputDir</span><span style="color: #E6E6E6">.</span><span style="color: #DCDCAA">exists</span><span style="color: #E6E6E6">()) {</span></span>
<span class="line"><span style="color: #E6E6E6">                </span><span style="color: #9CDCFE">outputDir</span><span style="color: #E6E6E6">.</span><span style="color: #DCDCAA">mkdirs</span><span style="color: #E6E6E6">();</span></span>
<span class="line"><span style="color: #E6E6E6">            }</span></span>
<span class="line"><span style="color: #E6E6E6">            </span><span style="color: #C586C0">try</span><span style="color: #E6E6E6"> (</span><span style="color: #4EC9B0">FileWriter</span><span style="color: #E6E6E6"> </span><span style="color: #9CDCFE">writer</span><span style="color: #E6E6E6"> </span><span style="color: #D4D4D4">=</span><span style="color: #E6E6E6"> </span><span style="color: #C586C0">new</span><span style="color: #E6E6E6"> </span><span style="color: #DCDCAA">FileWriter</span><span style="color: #E6E6E6">(outputFile)) {</span></span>
<span class="line"><span style="color: #E6E6E6">                </span><span style="color: #9CDCFE">writer</span><span style="color: #E6E6E6">.</span><span style="color: #DCDCAA">write</span><span style="color: #E6E6E6">(content);</span></span>
<span class="line"><span style="color: #E6E6E6">            }</span></span>
<span class="line"><span style="color: #E6E6E6">            </span><span style="color: #DCDCAA">getLog</span><span style="color: #E6E6E6">().</span><span style="color: #DCDCAA">info</span><span style="color: #E6E6E6">(</span><span style="color: #CE9178">&quot;Fichier généré à : &quot;</span><span style="color: #E6E6E6"> </span><span style="color: #D4D4D4">+</span><span style="color: #E6E6E6"> </span><span style="color: #9CDCFE">outputFile</span><span style="color: #E6E6E6">.</span><span style="color: #DCDCAA">getAbsolutePath</span><span style="color: #E6E6E6">());</span></span>
<span class="line"><span style="color: #E6E6E6">        } </span><span style="color: #C586C0">catch</span><span style="color: #E6E6E6"> (</span><span style="color: #4EC9B0">IOException</span><span style="color: #E6E6E6"> </span><span style="color: #9CDCFE">e</span><span style="color: #E6E6E6">) {</span></span>
<span class="line"><span style="color: #E6E6E6">            </span><span style="color: #C586C0">throw</span><span style="color: #E6E6E6"> </span><span style="color: #C586C0">new</span><span style="color: #E6E6E6"> </span><span style="color: #DCDCAA">MojoExecutionException</span><span style="color: #E6E6E6">(</span><span style="color: #CE9178">&quot;Erreur lors de la génération du fichier&quot;</span><span style="color: #E6E6E6">, e);</span></span>
<span class="line"><span style="color: #E6E6E6">        }</span></span>
<span class="line"><span style="color: #E6E6E6">    }</span></span>
<span class="line"><span style="color: #E6E6E6">}</span></span></code></pre></div>



<p></p>



<p>Dans cet exemple, le plugin définit une tâche nommée <code>generatefile</code> qui génère un fichier texte avec le contenu spécifié. Les utilisateurs peuvent personnaliser le répertoire de sortie, le nom du fichier et le contenu à l&rsquo;aide des paramètres du plugin.</p>



<ol start="1" class="wp-block-list">
<li></li>
</ol>



<h2 class="wp-block-heading">Étape 3 : Construire et Tester le Plugin</h2>



<ol class="wp-block-list">
<li>Construisez le projet du plugin en exécutant</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="mvn clean install" style="color:#E6E6E6;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-dark" style="background-color: #222222" tabindex="0"><code><span class="line"><span style="color: #E6E6E6">mvn </span><span style="color: #C586C0">clean</span><span style="color: #E6E6E6"> install</span></span></code></pre></div>



<p></p>



<p>Cette commande compile le plugin et l&rsquo;installe dans votre dépôt Maven local.</p>



<ol start="2" class="wp-block-list">
<li>Pour tester le plugin, créez un projet Maven simple et ajoutez la configuration suivante à son fichier <code>pom.xml</code> :</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="&lt;build&gt;
    &lt;plugins&gt;
        &lt;plugin&gt;
            &lt;groupId&gt;com.example&lt;/groupId&gt;
            &lt;artifactId&gt;my-plugin&lt;/artifactId&gt;
            &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
            &lt;configuration&gt;
                &lt;outputDir&gt;${project.build.directory}/custom-dir&lt;/outputDir&gt;
                &lt;filename&gt;custom-file.txt&lt;/filename&gt;
                &lt;content&gt;Ceci est un fichier généré sur mesure.&lt;/content&gt;
            &lt;/configuration&gt;
        &lt;/plugin&gt;
    &lt;/plugins&gt;
&lt;/build&gt;" style="color:#E6E6E6;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-dark" style="background-color: #222222" tabindex="0"><code><span class="line"><span style="color: #808080">&lt;</span><span style="color: #569CD6">build</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #E6E6E6">    </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">plugins</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #E6E6E6">        </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">plugin</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #E6E6E6">            </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">groupId</span><span style="color: #808080">&gt;</span><span style="color: #E6E6E6">com.example</span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">groupId</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #E6E6E6">            </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">artifactId</span><span style="color: #808080">&gt;</span><span style="color: #E6E6E6">my-plugin</span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">artifactId</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #E6E6E6">            </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">version</span><span style="color: #808080">&gt;</span><span style="color: #E6E6E6">1.0-SNAPSHOT</span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">version</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #E6E6E6">            </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">configuration</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #E6E6E6">                </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">outputDir</span><span style="color: #808080">&gt;</span><span style="color: #E6E6E6">${project.build.directory}/custom-dir</span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">outputDir</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #E6E6E6">                </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">filename</span><span style="color: #808080">&gt;</span><span style="color: #E6E6E6">custom-file.txt</span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">filename</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #E6E6E6">                </span><span style="color: #808080">&lt;</span><span style="color: #569CD6">content</span><span style="color: #808080">&gt;</span><span style="color: #E6E6E6">Ceci est un fichier généré sur mesure.</span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">content</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #E6E6E6">            </span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">configuration</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #E6E6E6">        </span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">plugin</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #E6E6E6">    </span><span style="color: #808080">&lt;/</span><span style="color: #569CD6">plugins</span><span style="color: #808080">&gt;</span></span>
<span class="line"><span style="color: #808080">&lt;/</span><span style="color: #569CD6">build</span><span style="color: #808080">&gt;</span></span></code></pre></div>



<p></p>



<ol start="3" class="wp-block-list">
<li>Exécutez le plugin avec la commande :</li>
</ol>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="mvn com.example:my-plugin:1.0-SNAPSHOT:generatefile" style="color:#E6E6E6;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-dark" style="background-color: #222222" tabindex="0"><code><span class="line"><span style="color: #E6E6E6">mvn com.example:my</span><span style="color: #D4D4D4">-</span><span style="color: #E6E6E6">plugin:</span><span style="color: #B5CEA8">1.0</span><span style="color: #D4D4D4">-</span><span style="color: #E6E6E6">SNAPSHOT:generatefile</span></span></code></pre></div>



<p></p>



<p>Vous devriez voir un message indiquant l&#8217;emplacement du fichier. Vérifiez que le fichier est créé avec le contenu spécifié.</p>



<h2 class="wp-block-heading">Étape 4 : Personnaliser et Étendre</h2>



<p>Vous pouvez améliorer votre plugin en ajoutant plus de tâches, de paramètres et de dépendances. Voici quelques conseils :</p>



<ul class="wp-block-list">
<li><strong>Ajouter Plusieurs Tâches</strong> : Définissez plusieurs classes annotées avec <code>@Mojo</code>, chacune implémentant une tâche différente.</li>



<li><strong>Accéder aux Détails du Projet</strong> : Utilisez l&rsquo;annotation <code>@Parameter</code> pour injecter les détails du projet Maven, tels que les dépendances et les répertoires de construction.</li>



<li><strong>Inclure des Dépendances</strong> : Ajoutez des dépendances dans le fichier <code>pom.xml</code> de votre plugin pour réutiliser des bibliothèques existantes.</li>
</ul>



<h2 class="wp-block-heading">Étape 5 : Publier le Plugin (Optionnel)</h2>



<p>Pour rendre votre plugin disponible à d&rsquo;autres développeurs, envisagez de le publier dans un dépôt Maven. Mettez à jour le fichier <code>pom.xml</code> avec les paramètres de gestion de distribution et déployez le plugin en exécutant :</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span role="button" tabindex="0" data-code="mvn deploy" style="color:#E6E6E6;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M4.5 12.75l6 6 9-13.5"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6"></path></svg></span><pre class="shiki slack-dark" style="background-color: #222222" tabindex="0"><code><span class="line"><span style="color: #E6E6E6">mvn deploy</span></span></code></pre></div>



<p></p>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Créer un plugin Maven personnalisé peut considérablement simplifier vos processus de construction et ajouter des fonctionnalités précieuses à vos projets. En suivant ce guide, vous pouvez construire, tester et étendre votre plugin facilement. Explorez la documentation Maven pour découvrir des fonctionnalités avancées et des meilleures pratiques.</p>



<h2 class="wp-block-heading">Code source</h2>



<p>L’exemple complet de ce tutorial est disponible sur&nbsp;<a href="https://github.com/JKaouech/spring-boot/tree/master/dependencies-actuator-maven-plugin">GitHub</a></p>
<p>L’article <a href="https://www.ji-ka.tn/create-maven-plugin/">Développer un Plugin Maven</a> est apparu en premier sur <a href="https://www.ji-ka.tn">ji-ka</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Cycle de Vie des Beans dans Spring Framework</title>
		<link>https://www.ji-ka.tn/cycle-de-vie-des-beans-dans-spring-framework/</link>
		
		<dc:creator><![CDATA[Jihed Kaouech]]></dc:creator>
		<pubDate>Wed, 04 Oct 2023 20:35:07 +0000</pubDate>
				<category><![CDATA[spring]]></category>
		<guid isPermaLink="false">http://jikatnr.cluster028.hosting.ovh.net/?p=1126</guid>

					<description><![CDATA[<p>On utilise beaucoup Spring et Spring Boot, mais parfois on ne sait pas comment cela fonctionne en interne. Ces mécanismes n&#8217;ont pas changés et toutes les fonctionnalités de Spring reposent dessus. 1. Spring, c&#8217;est quoi Sorti en 2003, Spring est un Framework de développement d&#8217;application Java qui fournit une infrastructure complète pour le développement d&#8217;applications [&#8230;]</p>
<p>L’article <a href="https://www.ji-ka.tn/cycle-de-vie-des-beans-dans-spring-framework/">Cycle de Vie des Beans dans Spring Framework</a> est apparu en premier sur <a href="https://www.ji-ka.tn">ji-ka</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>On utilise beaucoup Spring et Spring Boot, mais parfois on ne sait pas comment cela fonctionne en interne. Ces mécanismes n&rsquo;ont pas changés et toutes les fonctionnalités de Spring reposent dessus.</p>



<span id="more-1126"></span>



<h2 class="wp-block-heading">1. Spring, c&rsquo;est quoi</h2>



<p>Sorti en 2003, Spring est un Framework de développement d&rsquo;application Java qui fournit une infrastructure complète pour le développement d&rsquo;applications </p>



<p>Spring s’appuie principalement sur l’intégration de 3 concepts clés :</p>



<ul class="wp-block-list">
<li>L’inversion de contrôle&nbsp;: La recherche de dépendance et l’injection de dépendances</li>



<li>La programmation orientée aspect.</li>



<li>Une&nbsp;couche d’abstraction qui permet d’intégrer d’autres Framework et bibliothèques.</li>
</ul>



<h2 class="wp-block-heading">2. Bean, c&rsquo;est quoi</h2>



<p>Un Bean est une instance d&rsquo;une classe qui est crée, assemblé et géré par le conteneur Spring offrant ainsi un moyen souple de gérer les composants d&rsquo;une application.</p>



<h3 class="wp-block-heading">2.1. Caractéristiques des Beans</h3>



<ul class="wp-block-list">
<li><strong>Gestion du cycle de vie :</strong> Spring gère le cycle de vie des Beans, depuis leur création jusqu&rsquo;à leur destruction.</li>



<li><strong>Injection de dépendances :</strong> Les dépendances d&rsquo;un Bean peuvent être injectées par le conteneur Spring, ce qui facilite le développement et la maintenance de l&rsquo;application.</li>



<li><strong>Configuration déclarative :</strong> Les Beans peuvent être configurés à l&rsquo;aide de fichiers de configuration XML, d&rsquo;annotations Java ou de configurations basées sur Java.</li>



<li><strong>Réutilisation et modularité :</strong> Les beans peuvent être réutilisés et assemblés pour former des applications modulaires.</li>
</ul>



<h3 class="wp-block-heading">2.2. Cycle de vie d&rsquo;un Bean</h3>



<p>Le cycle de vie des beans dans Spring se compose de plusieurs étapes distinctes, chacune jouant un rôle crucial dans le bon fonctionnement de l&rsquo;application.  :</p>



<p>Un Bean suit un cycle de vie bien défini, composé des phases clés suivantes :</p>



<ul class="wp-block-list">
<li><strong>Instanciation :</strong> Cette phase correspond à la création d&rsquo;une instance de bean. Spring prend en charge plusieurs mécanismes d&rsquo;instanciation, tels que la création par un constructeur, la création par une méthode statique de la classe, ou la récupération depuis un pool de beans déjà créés.</li>



<li><strong>Injection des Dépendances</strong> : Une fois que le bean est créé, Spring injecte les dépendances nécessaires. Cela peut être réalisé par le biais de méthodes de configuration (setter) ou de la configuration du constructeur.</li>



<li><strong>Initialisation :</strong> Après l&rsquo;injection des dépendances, le conteneur Spring appelle des méthodes d&rsquo;initialisation spécifiées par le développeur. Ces méthodes permettent d&rsquo;effectuer des opérations personnalisées avant que le bean ne soit pleinement opérationnel.</li>



<li><strong>Utilisation :</strong> À ce stade, le bean est prêt à être utilisé dans l&rsquo;application. Les autres composants de l&rsquo;application peuvent maintenant interagir avec le bean pour effectuer leurs tâches.</li>



<li><strong>Destruction :</strong> Lorsque l&rsquo;application se termine ou lorsque le bean n&rsquo;est plus nécessaire, le conteneur Spring peut appeler des méthodes de destruction spécifiées par le développeur. Ces méthodes permettent d&rsquo;effectuer des opérations de nettoyage ou de libération de ressources.</li>
</ul>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="847" height="382" src="http://jikatnr.cluster028.hosting.ovh.net/wp-content/uploads/2023/10/Spring-bean-cdv-1.png" alt="" class="wp-image-1128" srcset="https://www.ji-ka.tn/wp-content/uploads/2023/10/Spring-bean-cdv-1.png 847w, https://www.ji-ka.tn/wp-content/uploads/2023/10/Spring-bean-cdv-1-300x135.png 300w, https://www.ji-ka.tn/wp-content/uploads/2023/10/Spring-bean-cdv-1-768x346.png 768w" sizes="(max-width: 847px) 100vw, 847px" /><figcaption class="wp-element-caption">étape d&rsquo;initialisation du bean</figcaption></figure>



<p></p>



<h2 class="wp-block-heading">3. Plus de d&rsquo;étails</h2>



<p>Carl Azoury  nous montre, ici, comment fonctionne le cycle de vie des Beans via cette conférences&nbsp; qui a eu lieu lors de l&rsquo;événement DEVOXX France 2023</p>



<p></p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<p class="responsive-video-wrap clr"><iframe title="Les secrets internes de Spring (Carl Azoury)" width="1200" height="675" src="https://www.youtube.com/embed/P61kCoXvKIc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe></p>
</div></figure>



<p></p>



<h2 class="wp-block-heading">4. Conclusion</h2>



<p>Comprendre le cycle de vie des beans dans Spring est essentiel pour un développement efficace et une gestion appropriée des ressources. En utilisant les différentes annotations et interfaces fournies par Spring, vous pouvez contrôler le comportement de vos beans à chaque étape de leur cycle de vie, garantissant ainsi une application bien gérée et performante</p>
<p>L’article <a href="https://www.ji-ka.tn/cycle-de-vie-des-beans-dans-spring-framework/">Cycle de Vie des Beans dans Spring Framework</a> est apparu en premier sur <a href="https://www.ji-ka.tn">ji-ka</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
