{"id":31251,"date":"2025-01-08T15:35:41","date_gmt":"2025-01-08T14:35:41","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=31251"},"modified":"2025-01-08T15:35:43","modified_gmt":"2025-01-08T14:35:43","slug":"quarkus-cosa-sono-le-estensioni-e-come-funzionano","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/","title":{"rendered":"Quarkus: cosa sono le estensioni e come funzionano"},"content":{"rendered":"\n<p>Le estensioni sono il cuore pulsante di Quarkus, rappresentando un meccanismo potente per integrare librerie e framework nel suo nucleo. <strong>Queste componenti aggiuntive permettono agli sviluppatori di personalizzare le proprie applicazioni, scegliendo solo le funzionalit\u00e0 necessarie e ottimizzando le risorse<\/strong>.<\/p>\n\n\n\n<p>Questo approccio modulare non solo riduce l&#8217;ingombro del codice, ma porta anche a tempi di avvio pi\u00f9 rapidi e un utilizzo pi\u00f9 efficiente della memoria.<\/p>\n\n\n\n<p>Prima di entrare nel vivo delle estensioni, \u00e8 importante capire il processo di bootstrap di un&#8217;applicazione Quarkus, suddiviso in tre fasi distinte, ognuna con un ruolo specifico nell&#8217;ottimizzazione e avvio dell&#8217;applicazione.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Augmentation (Aumento)<\/strong>: Questa fase avviene <strong>durante il build time<\/strong> e rappresenta il cuore dell&#8217;ottimizzazione di Quarkus. In questa fase, le estensioni di Quarkus vengono caricate ed esaminano il bytecode dell&#8217;applicazione, incluse le dipendenze e la configurazione. Le estensioni possono leggere file di configurazione, analizzare le annotazioni nelle classi e raccogliere metadati. Una volta raccolte tutte queste informazioni, le estensioni possono <strong>pre-processare le azioni di bootstrap<\/strong> delle librerie, come ad esempio la configurazione di ORM, DI (Dependency Injection) o controller REST. Il risultato di questa fase \u00e8 una serie di istruzioni in bytecode, che saranno <strong>parte del pacchetto finale dell&#8217;applicazione<\/strong>. \u00c8 importante notare che durante la fase di Augmentation, non vengono caricate classi dell&#8217;applicazione, ma si analizzano metadati e annotazioni. In questa fase si fa uso di <strong>Build Step Processors<\/strong> che hanno accesso alle informazioni Jandex e possono parsare descrittori e annotazioni. L&#8217;output di questa fase \u00e8 il cosiddetto bytecode registrato.<\/li>\n\n\n\n<li><strong>Static Init (Inizializzazione Statica)<\/strong>: Durante la fase di runtime, Quarkus esegue per prima cosa un metodo di inizializzazione statica. Questo metodo contiene azioni e configurazioni delle estensioni. <strong>Quando l&#8217;applicazione viene pacchettizzata in modo nativo<\/strong>, questo metodo viene <strong>pre-processato durante il build time<\/strong> e gli oggetti che genera sono serializzati nell&#8217;eseguibile nativo finale. In questo modo, <strong>il codice di inizializzazione non viene eseguito in modalit\u00e0 nativa<\/strong>, ma il risultato della computazione viene direttamente incluso nell&#8217;eseguibile. In modalit\u00e0 JVM, questa fase viene eseguita all&#8217;avvio dell&#8217;applicazione.<\/li>\n\n\n\n<li><strong>Runtime<\/strong>: Questa \u00e8 la fase in cui l&#8217;applicazione vera e propria viene eseguita, utilizzando il bytecode pre-elaborato nelle fasi precedenti. In questa fase si eseguono azioni che devono essere fatte in fase di runtime, come l&#8217;apertura di porte o l&#8217;avvio di servizi.<\/li>\n<\/ul>\n\n\n\n<p>Questi tre passaggi evidenziano la filosofia di Quarkus di <strong>spostare quanta pi\u00f9 elaborazione possibile al build time<\/strong> per ottimizzare le performance e ridurre il consumo di risorse al runtime. Questo approccio rende le applicazioni Quarkus pi\u00f9 veloci, pi\u00f9 leggere e pi\u00f9 adatte agli ambienti cloud-native.<\/p>\n\n\n\n<p>\u00c8 importante sottolineare che le estensioni di Quarkus sono progettate per integrarsi perfettamente con queste fasi di bootstrap. Le estensioni hanno un ruolo cruciale nel processo di ottimizzazione, poich\u00e9 eseguono operazioni di pre-elaborazione, come la generazione di bytecode e la configurazione delle dipendenze durante la fase di Augmentation.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-come-funzionano-le-estensioni\">Come funzionano le estensioni<\/h2>\n\n\n\n<p>Ogni estensione \u00e8 composta da due moduli principali: uno di <em>runtime<\/em>, che rende disponibili le funzionalit\u00e0 all&#8217;applicazione, e uno di <em>deployment<\/em>, che entra in azione durante la fase di build per ottimizzare l&#8217;applicazione secondo i principi di Quarkus (vedi <a href=\"https:\/\/quarkus.io\/guides\/building-my-first-extension\">Building my first extension<\/a>).<\/p>\n\n\n\n<p>Le estensioni si integrano con l&#8217;architettura di Quarkus sfruttando i suoi paradigmi, come ad esempio la <strong>generazione di bytecode in fase di build<\/strong>, al posto di aspettare la valutazione del codice a runtime. Questo significa che Quarkus pu\u00f2 fare molte ottimizzazioni durante la compilazione, rendendo le applicazioni pi\u00f9 veloci.<\/p>\n\n\n\n<p>Quarkus utilizza il concetto di &#8220;capability&#8221; per definire le funzionalit\u00e0 di un&#8217;estensione. Ogni estensione pu\u00f2 richiedere o fornire &#8220;capability&#8221; e solo un provider di una determinata capability \u00e8 permesso in un&#8217;applicazione. Le capabilities possono anche essere <strong>condizionali<\/strong>, ovvero, un&#8217;estensione pu\u00f2 <em>fornire<\/em> o <em>richiedere<\/em> una capability solo se una certa condizione \u00e8 soddisfatta.<\/p>\n\n\n\n<p>Il sistema di capabilities di Quarkus serve per:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Dichiarare le funzionalit\u00e0<\/strong> che un&#8217;estensione offre (capabilities fornite).<\/li>\n\n\n\n<li><strong>Definire le dipendenze<\/strong> da altre funzionalit\u00e0 (capabilities richieste).<\/li>\n\n\n\n<li><strong>Prevenire conflitti<\/strong> tra estensioni diverse che forniscono la stessa funzionalit\u00e0.<\/li>\n\n\n\n<li><strong>Consentire l&#8217;attivazione condizionale<\/strong> di alcune capabilities.<\/li>\n<\/ul>\n\n\n\n<p>Le estensioni possono essere facilmente aggiunte o rimosse dai progetti Quarkus e possono anche essere <strong>incluse implicitamente<\/strong> come dipendenze di altre estensioni. Sono gestite come dipendenze Maven, semplificando la loro gestione e integrazione nei progetti.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-cosa-possono-fare-le-estensioni\">Cosa possono fare le estensioni<\/h2>\n\n\n\n<p>Le estensioni di Quarkus offrono un&#8217;ampia gamma di funzionalit\u00e0, aprendo un mondo di possibilit\u00e0 per gli sviluppatori. <\/p>\n\n\n\n<p>Le estensioni possono fornire <strong>integrazioni con <\/strong><a href=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/5-migliori-database-open-source-nel-2024\/\"><strong>database<\/strong> <\/a>di vario tipo, semplificando l&#8217;accesso e la gestione dei dati. Inoltre, permettono di creare <strong>API REST<\/strong> in modo facile e veloce, grazie a modelli basati su annotazioni. Le estensioni possono anche abilitare il supporto per <strong>GraphQL<\/strong> e <strong>gRPC<\/strong>, offrendo alternative a REST per la comunicazione tra servizi.<\/p>\n\n\n\n<p>Un aspetto fondamentale delle estensioni \u00e8 la loro capacit\u00e0 di <strong>esporre componenti tramite CDI<\/strong> (Contexts and Dependency Injection), consentendo agli sviluppatori di utilizzare questi componenti nelle loro applicazioni in modo semplice. Questo permette di creare applicazioni ben strutturate e di riutilizzare facilmente le componenti. Si integrano perfettamente con il sistema di <strong>configurazione unificata di Quarkus<\/strong>, offrendo un&#8217;esperienza coerente e intuitiva.<\/p>\n\n\n\n<p>Le estensioni sono progettate per ottenere le <strong>massime prestazioni<\/strong> possibili, adottando un modello non bloccante per le operazioni interne e offrendo <strong>API basate su Mutiny<\/strong> per la massima scalabilit\u00e0. Questo significa che le applicazioni create con Quarkus sono in grado di gestire un gran numero di richieste senza rallentamenti. Inoltre, sono pensate per l&#8217;integrazione con <strong><a href=\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/cloud-it\/monitoraggio-e-logging-avanzato-per-kubernetes\/\">Kubernetes <\/a>e container<\/strong>, essendo Quarkus un framework cloud-native.<\/p>\n\n\n\n<p>Oltre a queste funzionalit\u00e0, le estensioni possono fornire integrazioni con i <strong>servizi di sviluppo<\/strong>, come i Dev Services, e anche strumenti per il testing, il monitoraggio della salute (health checks), e l&#8217;esposizione di metriche; quest&#8217;ultimo aspetto \u00e8 un elemento fondamentale per costruire, gestire e scalare applicazioni cloud-native in modo efficace. Sistemi di osservabilit\u00e0 come <strong>Prometheus<\/strong>, <strong>Grafana<\/strong>, <strong>Datadog<\/strong> e <strong>New Relic<\/strong> sono diventati indispensabili per sfruttare al meglio questa capacit\u00e0.<\/p>\n\n\n\n<p>Possono anche essere utilizzate per la <strong>gestione della sicurezza<\/strong> delle applicazioni, offrendo integrazioni con sistemi di autenticazione e autorizzazione. Un esempio di progetto che fa uso di queste estensioni \u00e8 disponibile su GitHub <a href=\"https:\/\/github.com\/amusarra\/quarkus-mtls-auth\">Tutorial Project for Quarkus Mutual TLS (mTLS) Authentication<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-analizziamo-l-estensione-quarkus-info\">Analizziamo l&#8217;estensione Quarkus Info<\/h2>\n\n\n\n<p>L&#8217;estensione <a href=\"https:\/\/quarkus.io\/extensions\/io.quarkus\/quarkus-info\/\">Quarkus Info<\/a> (che fare parte del core) fornisce <strong>informazioni sull&#8217;applicazione Quarkus<\/strong> in esecuzione. Questa estensione, come altre, sfrutta i meccanismi di Quarkus per <strong>eseguire la maggior parte del lavoro di elaborazione al build time<\/strong>, ottimizzando le prestazioni a runtime. Il codice sorgente dell&#8217;estensione \u00e8 disponibile sul <a href=\"https:\/\/github.com\/quarkusio\/quarkus\/tree\/main\/extensions\/info\">repository GitHub<\/a> di Quarkus.<\/p>\n\n\n\n<p>L&#8217;estensione <code>quarkus-info<\/code> segue la convenzione di Quarkus per le estensioni, con un modulo runtime e un modulo deployment. Il modulo <strong>runtime<\/strong> contiene le classi e le risorse necessarie per il funzionamento dell&#8217;estensione durante l&#8217;esecuzione dell&#8217;applicazione, mentre il modulo <strong>deployment<\/strong> contiene le classi che eseguono la logica di build-time, inclusi i <em><a href=\"https:\/\/quarkus.io\/guides\/writing-extensions#build-step-processors\">build step processor<\/a><\/em>.<\/p>\n\n\n\n<p>A seguire le principali funzionalit\u00e0.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>L&#8217;estensione Info espone un endpoint HTTP che fornisce un documento JSON contenente metadati sull&#8217;applicazione.<\/li>\n\n\n\n<li>Questi metadati includono informazioni come il <strong>nome dell&#8217;applicazione<\/strong>, la <strong>versione<\/strong> e le <strong>dipendenze runtime<\/strong>. Questa funzionalit\u00e0 \u00e8 utile per il monitoraggio, il debug e la gestione dell&#8217;applicazione.<\/li>\n\n\n\n<li>L&#8217;estensione Info mette a disposizione dei bean a cui poter fare riferimento tramite l&#8217;annotazione <code>@Inject<\/code>.<\/li>\n<\/ul>\n\n\n\n<p><strong>Augmentation (Build Time)<\/strong>. Durante la fase di <em>augmentation<\/em>, l&#8217;estensione Info utilizza i <em><a href=\"https:\/\/quarkus.io\/guides\/writing-extensions#build-step-processors\">build step processors<\/a><\/em> per raccogliere metadati sull&#8217;applicazione. Questi processori analizzano le informazioni disponibili, come il file pom.xml, le annotazioni e altre risorse del progetto.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Le informazioni sull&#8217;applicazione (nome e versione) vengono ottenute tramite un <em><a href=\"https:\/\/quarkus.io\/guides\/writing-extensions#build-items\">BuildItem<\/a><\/em> chiamato <em><a href=\"https:\/\/github.com\/quarkusio\/quarkus\/blob\/main\/core\/deployment\/src\/main\/java\/io\/quarkus\/deployment\/builditem\/ApplicationInfoBuildItem.java\">ApplicationInfoBuildItem<\/a><\/em>.<\/li>\n\n\n\n<li>Le dipendenze runtime vengono recuperate tramite <em><a href=\"https:\/\/github.com\/quarkusio\/quarkus\/blob\/main\/core\/deployment\/src\/main\/java\/io\/quarkus\/deployment\/builditem\/AppModelProviderBuildItem.java\">AppModelProviderBuildItem<\/a><\/em>.<\/li>\n\n\n\n<li>Questi dati vengono elaborati per creare un documento JSON che sar\u00e0 esposto dall&#8217;endpoint.<\/li>\n<\/ul>\n\n\n\n<p><strong>Static Init (Inizializzazione Statica)<\/strong>: L&#8217;estensione Info sfrutta la fase di <em>static init<\/em>. Il documento JSON viene generato nella fase di build e serializzato, quindi incluso nell&#8217;eseguibile nativo. In modalit\u00e0 JVM, l&#8217;inizializzazione statica viene eseguita all&#8217;avvio. Questo approccio assicura che le informazioni non vengano ricalcolate ogni volta che l&#8217;applicazione viene avviata.<\/p>\n\n\n\n<p><strong>Runtime<\/strong>: Durante la fase <em>runtime<\/em>, l&#8217;estensione Info espone un endpoint HTTP che restituisce il documento JSON contenente le informazioni raccolte durante la fase di build. Questo endpoint \u00e8 tipicamente accessibile tramite \/q\/info. L&#8217;implementazione dell&#8217;endpoint HTTP pu\u00f2 basarsi su Vert.x.<\/p>\n\n\n\n<p>Le classi principali di questa estensione sono: <code>InfoProcessor<\/code>, <code>InfoRecorder<\/code> e <code>InfoHandler<\/code>. Nel flusso di esecuzione accade quanto segue.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Build Time:<\/strong> Durante la fase di build di un&#8217;applicazione Quarkus, il <em>build step processor<\/em> InfoProcessor viene eseguito.<\/li>\n\n\n\n<li><strong>Raccolta Metadati:<\/strong> Il InfoProcessor utilizza i metodi annotati con @BuildStep per raccogliere metadati sull&#8217;applicazione, consumando <em>build item<\/em> come ApplicationInfoBuildItem e AppModelProviderBuildItem.<\/li>\n\n\n\n<li><strong>Creazione JSON:<\/strong> Il InfoProcessor crea un JsonObject contenente le informazioni raccolte, inclusi nome, versione e dipendenze.<\/li>\n\n\n\n<li><strong>Registrazione Handler:<\/strong> Il InfoProcessor utilizza InfoRecorder per registrare il bytecode necessario per creare un&#8217;istanza dell&#8217;handler HTTP (InfoHandler). Questo codice sar\u00e0 eseguito durante l&#8217;inizializzazione dell&#8217;applicazione.<\/li>\n\n\n\n<li><strong>Creazione Endpoint:<\/strong> Il InfoProcessor crea un RouteBuildItem associando l&#8217;handler all&#8217;endpoint \/q\/info.<\/li>\n\n\n\n<li><strong>Runtime:<\/strong> Quando l&#8217;applicazione viene avviata, il codice registrato da InfoRecorder crea l&#8217;InfoHandler, che risponde alle richieste HTTP all&#8217;endpoint \/q\/info. L&#8217;InfoHandler utilizza il JsonObject creato a build time per rispondere alla richiesta con il JSON contenente le informazioni.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-usiamo-l-estensione-quarkus-info\">Usiamo l&#8217;estensione Quarkus Info<\/h2>\n\n\n\n<p>Adesso proviamo a usare l&#8217;estensione quarkus-info creando una semplice applicazione Quarkus. In questo esempio faremo uso della versione 3.17.5 usando Maven e il plugin Quarkus per la creazione del progetto. Consiglio di consultare il documento <a href=\"https:\/\/quarkus.io\/guides\/getting-started\">Creating Your First Application<\/a> per verificare i pre-requisiti.<\/p>\n\n\n\n<p>Per creare il progetto di esempio quarkus-info-app che includa l&#8217;estensione info usando la versione di Quarkus 3.17.5, occorre lanciare il comando indicato a seguire.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">mvn io.quarkus.platform:quarkus-maven-plugin:<span class=\"hljs-number\">3.17<\/span><span class=\"hljs-number\">.5<\/span>:create \\\n    -DprojectGroupId=it.dontesta.quarkus.lab \\\n    -DprojectArtifactId=quarkus-info-app \\\n    -DprojectVersion=<span class=\"hljs-number\">1.0<\/span><span class=\"hljs-number\">.0<\/span>-SNAPSHOT \\\n    -Dextensions=<span class=\"hljs-string\">\"info\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Una volta eseguito il comando, dobbiamo spostarci all&#8217;interno della directory quarkus-info-app e da qui eseguire l&#8217;applicazione Quarkus con il comando <code>mvn quarkus:dev<\/code>.<\/p>\n\n\n\n<p>Quando l&#8217;applicazione sar\u00e0 attiva, chiamando l&#8217;endpoint http:\/\/localhost:8080\/q\/info vedremo un JSON come quello mostrato a seguire.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n  <span class=\"hljs-attr\">\"os\"<\/span> : {\n    <span class=\"hljs-attr\">\"name\"<\/span> : <span class=\"hljs-string\">\"Mac OS X\"<\/span>,\n    <span class=\"hljs-attr\">\"version\"<\/span> : <span class=\"hljs-string\">\"15.2\"<\/span>,\n    <span class=\"hljs-attr\">\"arch\"<\/span> : <span class=\"hljs-string\">\"aarch64\"<\/span>\n  },\n  <span class=\"hljs-attr\">\"build\"<\/span> : {\n    <span class=\"hljs-attr\">\"group\"<\/span> : <span class=\"hljs-string\">\"it.dontesta.quarkus.lab\"<\/span>,\n    <span class=\"hljs-attr\">\"artifact\"<\/span> : <span class=\"hljs-string\">\"quarkus-info-app\"<\/span>,\n    <span class=\"hljs-attr\">\"version\"<\/span> : <span class=\"hljs-string\">\"1.0.0-SNAPSHOT\"<\/span>,\n    <span class=\"hljs-attr\">\"time\"<\/span> : <span class=\"hljs-string\">\"2024-12-29T14:21:24.453256+01:00\"<\/span>,\n    <span class=\"hljs-attr\">\"quarkusVersion\"<\/span> : <span class=\"hljs-string\">\"3.17.5\"<\/span>,\n    <span class=\"hljs-attr\">\"enabled\"<\/span> : <span class=\"hljs-string\">\"true\"<\/span>\n  },\n  <span class=\"hljs-attr\">\"java\"<\/span> : {\n    <span class=\"hljs-attr\">\"version\"<\/span> : <span class=\"hljs-string\">\"23.0.1\"<\/span>\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Nel caso in cui il progetto fosse sottoposto a versioning tramite git, chiamando  l&#8217;endpoint http:\/\/localhost:8080\/q\/info vedremo un JSON come quello mostrato a seguire, dov&#8217;\u00e8 possibile notare le informazioni base su git, come il nome del branch e l&#8217;ultimo commit.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n  <span class=\"hljs-attr\">\"git\"<\/span> : {\n    <span class=\"hljs-attr\">\"branch\"<\/span> : <span class=\"hljs-string\">\"main\"<\/span>,\n    <span class=\"hljs-attr\">\"commit\"<\/span> : {\n      <span class=\"hljs-attr\">\"id\"<\/span> : <span class=\"hljs-string\">\"9b0dbf2777a9d2e955b6b18d2dff71af956ad838\"<\/span>,\n      <span class=\"hljs-attr\">\"time\"<\/span> : <span class=\"hljs-string\">\"2024-12-29T14:42:04+01:00\"<\/span>\n    }\n  },\n  <span class=\"hljs-attr\">\"java\"<\/span> : {\n    <span class=\"hljs-attr\">\"version\"<\/span> : <span class=\"hljs-string\">\"23.0.1\"<\/span>\n  },\n  <span class=\"hljs-attr\">\"os\"<\/span> : {\n    <span class=\"hljs-attr\">\"name\"<\/span> : <span class=\"hljs-string\">\"Mac OS X\"<\/span>,\n    <span class=\"hljs-attr\">\"version\"<\/span> : <span class=\"hljs-string\">\"15.2\"<\/span>,\n    <span class=\"hljs-attr\">\"arch\"<\/span> : <span class=\"hljs-string\">\"aarch64\"<\/span>\n  },\n  <span class=\"hljs-attr\">\"build\"<\/span> : {\n    <span class=\"hljs-attr\">\"group\"<\/span> : <span class=\"hljs-string\">\"it.dontesta.quarkus.lab\"<\/span>,\n    <span class=\"hljs-attr\">\"artifact\"<\/span> : <span class=\"hljs-string\">\"quarkus-info-app\"<\/span>,\n    <span class=\"hljs-attr\">\"version\"<\/span> : <span class=\"hljs-string\">\"1.0.0-SNAPSHOT\"<\/span>,\n    <span class=\"hljs-attr\">\"time\"<\/span> : <span class=\"hljs-string\">\"2024-12-29T14:43:50.451164+01:00\"<\/span>,\n    <span class=\"hljs-attr\">\"quarkusVersion\"<\/span> : <span class=\"hljs-string\">\"3.17.5\"<\/span>,\n    <span class=\"hljs-attr\">\"enabled\"<\/span> : <span class=\"hljs-string\">\"true\"<\/span>\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Agendo sulla configurazione <code>quarkus.info.git.mode<\/code> dell&#8217;estensione quarkus-info, impostando il valore FULL, chiamando nuovamente l&#8217;endpoint http:\/\/localhost:8080\/q\/info vedremo un JSON come quello mostrato a seguire, dov&#8217;\u00e8 possibile notare, oltre alle informazioni standard, i tags e maggiori dettagli sull&#8217;ultimo commit.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JSON \/ JSON with Comments\" data-shcb-language-slug=\"json\"><span><code class=\"hljs language-json\">{\n  <span class=\"hljs-attr\">\"git\"<\/span> : {\n    <span class=\"hljs-attr\">\"branch\"<\/span> : <span class=\"hljs-string\">\"main\"<\/span>,\n    <span class=\"hljs-attr\">\"tags\"<\/span> : &#91; <span class=\"hljs-string\">\"v1.0.0\"<\/span> ],\n    <span class=\"hljs-attr\">\"commit\"<\/span> : {\n      <span class=\"hljs-attr\">\"id\"<\/span> : {\n        <span class=\"hljs-attr\">\"full\"<\/span> : <span class=\"hljs-string\">\"9b0dbf2777a9d2e955b6b18d2dff71af956ad838\"<\/span>,\n        <span class=\"hljs-attr\">\"abbrev\"<\/span> : <span class=\"hljs-string\">\"9b0dbf2777a9d\"<\/span>,\n        <span class=\"hljs-attr\">\"message\"<\/span> : {\n          <span class=\"hljs-attr\">\"full\"<\/span> : <span class=\"hljs-string\">\"Initial project import to git\"<\/span>,\n          <span class=\"hljs-attr\">\"short\"<\/span> : <span class=\"hljs-string\">\"Initial project import to git\"<\/span>\n        }\n      },\n      <span class=\"hljs-attr\">\"time\"<\/span> : <span class=\"hljs-string\">\"2024-12-29T14:42:04+01:00\"<\/span>,\n      <span class=\"hljs-attr\">\"author\"<\/span> : {\n        <span class=\"hljs-attr\">\"time\"<\/span> : <span class=\"hljs-string\">\"2024-12-29T14:42:04+01:00\"<\/span>\n      },\n      <span class=\"hljs-attr\">\"committer\"<\/span> : {\n        <span class=\"hljs-attr\">\"time\"<\/span> : <span class=\"hljs-string\">\"2024-12-29T14:42:04+01:00\"<\/span>\n      },\n      <span class=\"hljs-attr\">\"user\"<\/span> : {\n        <span class=\"hljs-attr\">\"email\"<\/span> : <span class=\"hljs-string\">\"antonio.musarra@gmail.com\"<\/span>,\n        <span class=\"hljs-attr\">\"name\"<\/span> : <span class=\"hljs-string\">\"Antonio Musarra\"<\/span>\n      }\n    },\n    <span class=\"hljs-attr\">\"build\"<\/span> : {\n      <span class=\"hljs-attr\">\"user\"<\/span> : {\n        <span class=\"hljs-attr\">\"email\"<\/span> : <span class=\"hljs-string\">\"antonio.musarra@gmail.com\"<\/span>,\n        <span class=\"hljs-attr\">\"name\"<\/span> : <span class=\"hljs-string\">\"Antonio Musarra\"<\/span>\n      },\n      <span class=\"hljs-attr\">\"version\"<\/span> : <span class=\"hljs-string\">\"1.0.0-SNAPSHOT\"<\/span>,\n      <span class=\"hljs-attr\">\"host\"<\/span> : <span class=\"hljs-string\">\"amusarra-macbook-pro.local\"<\/span>\n    }\n  },\n  <span class=\"hljs-attr\">\"java\"<\/span> : {\n    <span class=\"hljs-attr\">\"version\"<\/span> : <span class=\"hljs-string\">\"23.0.1\"<\/span>\n  },\n  <span class=\"hljs-attr\">\"os\"<\/span> : {\n    <span class=\"hljs-attr\">\"name\"<\/span> : <span class=\"hljs-string\">\"Mac OS X\"<\/span>,\n    <span class=\"hljs-attr\">\"version\"<\/span> : <span class=\"hljs-string\">\"15.2\"<\/span>,\n    <span class=\"hljs-attr\">\"arch\"<\/span> : <span class=\"hljs-string\">\"aarch64\"<\/span>\n  },\n  <span class=\"hljs-attr\">\"build\"<\/span> : {\n    <span class=\"hljs-attr\">\"group\"<\/span> : <span class=\"hljs-string\">\"it.dontesta.quarkus.lab\"<\/span>,\n    <span class=\"hljs-attr\">\"artifact\"<\/span> : <span class=\"hljs-string\">\"quarkus-info-app\"<\/span>,\n    <span class=\"hljs-attr\">\"version\"<\/span> : <span class=\"hljs-string\">\"1.0.0-SNAPSHOT\"<\/span>,\n    <span class=\"hljs-attr\">\"time\"<\/span> : <span class=\"hljs-string\">\"2024-12-29T14:50:01.092601+01:00\"<\/span>,\n    <span class=\"hljs-attr\">\"quarkusVersion\"<\/span> : <span class=\"hljs-string\">\"3.17.5\"<\/span>,\n    <span class=\"hljs-attr\">\"enabled\"<\/span> : <span class=\"hljs-string\">\"true\"<\/span>\n  }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JSON \/ JSON with Comments<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">json<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Queste informazioni sono anche accessibili tramite la DevUI di Quarkus attraverso la URL http:\/\/localhost:8080\/q\/dev-ui\/io.quarkus.quarkus-info\/information<\/p>\n\n\n\n<p>L&#8217;estensione quarkus-info \u00e8 un modo semplice per esporre le informazioni sull&#8217;applicazione, rendendo pi\u00f9 facile il monitoraggio e la diagnostica. Con pochi passaggi, puoi aggiungere questa estensione a qualsiasi applicazione Quarkus e iniziare a usufruire delle sue funzionalit\u00e0 senza la necessit\u00e0 di &#8220;inventare la ruota&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusioni\">Conclusioni<\/h2>\n\n\n\n<p>Comprendere la struttura delle estensioni di Quarkus permette di creare componenti personalizzati potenti, che integrano librerie o strumenti di terze parti. Le estensioni sono un elemento fondamentale per l&#8217;ecosistema di Quarkus, che consente di creare applicazioni flessibili, efficienti e adatte alle esigenze di ogni progetto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Le estensioni sono il cuore pulsante di Quarkus, rappresentando un meccanismo potente per integrare librerie e framework nel suo nucleo. Queste componenti aggiuntive permettono agli sviluppatori di personalizzare le proprie applicazioni, scegliendo solo le funzionalit\u00e0 necessarie e ottimizzando le risorse. Questo approccio modulare non solo riduce l&#8217;ingombro del codice, ma porta anche a tempi di&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/\">Read more<\/a><\/p>\n","protected":false},"author":299,"featured_media":31312,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10269,10263],"tags":[],"collections":[11708],"class_list":{"0":"post-31251","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-architettura-del-software","8":"category-backend-it","9":"collections-dalla-community","10":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Quarkus: cosa sono le estensioni e come funzionano<\/title>\n<meta name=\"description\" content=\"Comprendere la struttura delle estensioni permette di creare componenti personalizzati potenti, che integrano librerie o strumenti di terze parti.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Quarkus: cosa sono le estensioni e come funzionano\" \/>\n<meta property=\"og:description\" content=\"Comprendere la struttura delle estensioni permette di creare componenti personalizzati potenti, che integrano librerie o strumenti di terze parti.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-01-08T14:35:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-08T14:35:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1792\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Antonio Musarra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Antonio Musarra\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/\"},\"author\":{\"name\":\"Antonio Musarra\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8649554e10cf6f48891694be1891475b\"},\"headline\":\"Quarkus: cosa sono le estensioni e come funzionano\",\"datePublished\":\"2025-01-08T14:35:41+00:00\",\"dateModified\":\"2025-01-08T14:35:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/\"},\"wordCount\":1757,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding.webp\",\"articleSection\":[\"Architettura del software\",\"Backend\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/\",\"name\":\"Quarkus: cosa sono le estensioni e come funzionano\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding.webp\",\"datePublished\":\"2025-01-08T14:35:41+00:00\",\"dateModified\":\"2025-01-08T14:35:43+00:00\",\"description\":\"Comprendere la struttura delle estensioni permette di creare componenti personalizzati potenti, che integrano librerie o strumenti di terze parti.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding.webp\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding.webp\",\"width\":1792,\"height\":1024,\"caption\":\"fast\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Architettura del software\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Quarkus: cosa sono le estensioni e come funzionano\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8649554e10cf6f48891694be1891475b\",\"name\":\"Antonio Musarra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/68ceae8da379c8b4cdbe4d25ad5d94f7678e91e07cee64593261baec2ec44a12?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/68ceae8da379c8b4cdbe4d25ad5d94f7678e91e07cee64593261baec2ec44a12?s=96&d=mm&r=g\",\"caption\":\"Antonio Musarra\"},\"description\":\"Ho iniziato il mio viaggio nel mondo dell'informatica da un Olivetti M24 dotato di un processore Intel 8086 acquistato da mio padre esclusivamente per il suo lavoro. Non ho mai posseduto console di nessun genere (Commodore, Amiga, etc\u2026) e inizialmente quell'enorme scatola mi terrorizzava, terrore durato poco; giorno dopo giorno prendevo rapidamente il controllo fino a quando\u2026. Ho sempre creduto che la condivisione della conoscenza sia un ottimo mezzo per la crescita personale; mi piace condividere le mie competenze attraverso articoli tecnici, progetti open source e pubblicazioni su piattaforme come il mio blog personale https:\/\/www.dontesta.it.\",\"sameAs\":[\"https:\/\/www.dontesta.it\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/amusarra\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Quarkus: cosa sono le estensioni e come funzionano","description":"Comprendere la struttura delle estensioni permette di creare componenti personalizzati potenti, che integrano librerie o strumenti di terze parti.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/","og_locale":"en_US","og_type":"article","og_title":"Quarkus: cosa sono le estensioni e come funzionano","og_description":"Comprendere la struttura delle estensioni permette di creare componenti personalizzati potenti, che integrano librerie o strumenti di terze parti.","og_url":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2025-01-08T14:35:41+00:00","article_modified_time":"2025-01-08T14:35:43+00:00","og_image":[{"width":1792,"height":1024,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding.webp","type":"image\/webp"}],"author":"Antonio Musarra","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Antonio Musarra","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/"},"author":{"name":"Antonio Musarra","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8649554e10cf6f48891694be1891475b"},"headline":"Quarkus: cosa sono le estensioni e come funzionano","datePublished":"2025-01-08T14:35:41+00:00","dateModified":"2025-01-08T14:35:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/"},"wordCount":1757,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding.webp","articleSection":["Architettura del software","Backend"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/","url":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/","name":"Quarkus: cosa sono le estensioni e come funzionano","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding.webp","datePublished":"2025-01-08T14:35:41+00:00","dateModified":"2025-01-08T14:35:43+00:00","description":"Comprendere la struttura delle estensioni permette di creare componenti personalizzati potenti, che integrano librerie o strumenti di terze parti.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding.webp","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding.webp","width":1792,"height":1024,"caption":"fast"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/quarkus-cosa-sono-le-estensioni-e-come-funzionano\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/"},{"@type":"ListItem","position":3,"name":"Architettura del software","item":"https:\/\/www.codemotion.com\/magazine\/it\/backend-it\/architettura-del-software\/"},{"@type":"ListItem","position":4,"name":"Quarkus: cosa sono le estensioni e come funzionano"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/8649554e10cf6f48891694be1891475b","name":"Antonio Musarra","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/68ceae8da379c8b4cdbe4d25ad5d94f7678e91e07cee64593261baec2ec44a12?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/68ceae8da379c8b4cdbe4d25ad5d94f7678e91e07cee64593261baec2ec44a12?s=96&d=mm&r=g","caption":"Antonio Musarra"},"description":"Ho iniziato il mio viaggio nel mondo dell'informatica da un Olivetti M24 dotato di un processore Intel 8086 acquistato da mio padre esclusivamente per il suo lavoro. Non ho mai posseduto console di nessun genere (Commodore, Amiga, etc\u2026) e inizialmente quell'enorme scatola mi terrorizzava, terrore durato poco; giorno dopo giorno prendevo rapidamente il controllo fino a quando\u2026. Ho sempre creduto che la condivisione della conoscenza sia un ottimo mezzo per la crescita personale; mi piace condividere le mie competenze attraverso articoli tecnici, progetti open source e pubblicazioni su piattaforme come il mio blog personale https:\/\/www.dontesta.it.","sameAs":["https:\/\/www.dontesta.it"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/amusarra\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding-600x400.webp","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding-600x600.webp","author_info":{"display_name":"Antonio Musarra","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/amusarra\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding.webp",1792,1024,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding-150x150.webp",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding-300x171.webp",300,171,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding-768x439.webp",768,439,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding-1024x585.webp",1024,585,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding-1536x878.webp",1536,878,true],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding.webp",1792,1024,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding-100x100.webp",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding-180x128.webp",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding-896x504.webp",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding-400x225.webp",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding-600x400.webp",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/12\/DALL\u00b7E-2025-01-02-11.29.55-A-horizontal-illustration-of-a-modern-developers-workspace-focused-on-coding-elements-inspired-by-Quarkus-extensions.-The-laptop-screen-shows-coding-600x600.webp",600,600,true]},"uagb_author_info":{"display_name":"Antonio Musarra","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/amusarra\/"},"uagb_comment_info":0,"uagb_excerpt":"Le estensioni sono il cuore pulsante di Quarkus, rappresentando un meccanismo potente per integrare librerie e framework nel suo nucleo. Queste componenti aggiuntive permettono agli sviluppatori di personalizzare le proprie applicazioni, scegliendo solo le funzionalit\u00e0 necessarie e ottimizzando le risorse. Questo approccio modulare non solo riduce l&#8217;ingombro del codice, ma porta anche a tempi di&#8230;&hellip;","lang":"it","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/31251","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/299"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=31251"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/31251\/revisions"}],"predecessor-version":[{"id":31314,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/31251\/revisions\/31314"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/31312"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=31251"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=31251"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=31251"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=31251"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}