Le 5 migliori idee e argomenti di progetti multi-modulo Maven per principianti [2022]
Pubblicato: 2021-05-27Man mano che ogni progetto diventa più complesso e stratificato, il modo corretto per gestirlo è dividerlo in diversi moduli. In Maven, sebbene sia possibile collegare questi molteplici progetti come dipendenze, rende il processo di compilazione molto più complesso. Pertanto, l'approccio preferito è strutturare il progetto come multimodulare e passare il resto a Maven.
Sommario
Vantaggi dell'utilizzo di moduli multipli in Maven
Il vantaggio significativo dell'utilizzo di più moduli invece dell'inserimento delle dipendenze o di qualsiasi altra procedura è che riduce la duplicazione. Per capirlo meglio, supponiamo di lavorare su un'applicazione composta da due moduli, diciamo il modulo back-end e il modulo front-end.
Se lavori su entrambi i moduli e modifichi alcune funzionalità che interessano entrambi i moduli, dovrai creare entrambi i moduli o i componenti in modo isolato senza uno strumento di costruzione specializzato. Oppure è necessario scrivere uno script per compilare il codice, eseguire test e visualizzare i risultati finali.
Ora, se la complessità aumenta ulteriormente e il tuo progetto ha più di due moduli, diventerà progressivamente più difficile eseguire questa attività senza uno strumento di compilazione specializzato. Inoltre, nei problemi del mondo reale, i tuoi progetti potrebbero richiedere alcuni plug-in Maven per eseguire alcune operazioni cruciali durante l'intero ciclo di vita della build, condividere dipendenze o includere altri progetti BOM.
Come risultato di queste sfide, i multi-moduli in Maven sono estremamente utili e consentono di creare i moduli dell'applicazione in un'unica riga di comando. Consente inoltre di condividere una grande quantità di dati e di configurazione tra più moduli senza interruzioni.
Leggi anche: Risposta alla domanda dell'intervista a Maven
Termini chiave da sapere sui progetti multimodulo in Maven
1. POM padre (Modulo oggetto progetto)
Ogni file pom.xml in Maven, per il supporto dell'ereditarietà, ha un POM padre, noto come Super POM. Questo può essere posizionato nei binari di Maven e puoi anche unire i due file per creare il POM efficace.
Quindi, puoi creare il tuo file pom.xml per fungere da genitore per il tuo progetto. Dopo averlo fatto, puoi aggiungere tutte le dipendenze e la configurazione, impostarlo come genitore dei moduli figlio e abilitare l'ereditarietà. Fatta eccezione per l'eredità, Maven fornisce anche l'aggregazione. Il POM padre che sfrutta la funzionalità di aggregazione è noto come POM aggregato: questo tipo di POM dichiara esplicitamente i moduli figlio nel file pom.xml.
2. Sottomoduli
I sottoprogetti, noti anche come sottomoduli, possono essere intesi come moduli Maven standard che ereditano dal POM padre. Utilizzando l'ereditarietà, i moduli condividono varie dipendenze e configurazioni. Tuttavia, se è necessario creare il progetto rapidamente, sarà necessario dichiarare esplicitamente i sottomoduli nel POM padre, rendendolo il POM aggregato.
3. Il semplice progetto multimodulo
App e util sono due moduli contenuti in The Simple Multi-Module Project. Il modulo util è necessario per fornire un metodo statico per unire o aggiungere stringhe diverse usando la libreria Apache Commons Lang e il modulo app è necessario per chiamare il modulo util. Ecco uno snippet dal file app.java:
simple-multi/app/src/main/java/app/App.java
App di classe pubblica {
public static void main(String[] args) {
System.out.println(nuova App().greet("Mondo!"));
}
public String greet(Nome stringa) {
return Util.join ("Ciao", nome);
}
}
Per costruire il progetto, esegui
$ cd semplice-multi
$ mvn test di pulizia
Il generatore di codice di Maven crea entrambi i moduli del tuo progetto nell'ordine corretto, esegue i test necessari e restituisce i risultati in un formato di riepilogo facilmente comprensibile, come di seguito:
4. Struttura di un progetto multimodulo
Ecco il layout di un semplice progetto Multi-Module:
La directory simple-multi è la directory principale ed è presente all'inizio dell'intero progetto. Contiene il POM di livello superiore (POM padre), ma questo POM padre non ha alcuna cartella di origine.
La directory di primo livello contiene anche app e util, che sono normali progetti Maven con directory e file pom.xml.
Il POM di livello superiore e il POM del modulo differiscono leggermente dal POM normale. Vediamo nel dettaglio cosa contengono:
5. POM di livello superiore
Un POM padre o un POM di livello superiore è richiesto dal progetto Maven Multi-Module nella directory principale.
Il POM di livello superiore definisce aspetti importanti e coordinate di progetto come ID artefatto, versione e ID gruppo, come in qualsiasi progetto normale. Tuttavia, il tipo di imballaggio per questo non è nel solito formato da guerra o barattolo, ma come un pom. Questo perché il modulo di primo livello non contiene altre directory di origine. I moduli/elementi del modulo aggiungono l'app e i moduli utili.
Il contenuto di questo file include:
semplice-multi/pom.xml
<progetto xmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
<modelVersion>4.0.0</modelVersion>
<groupId>org.codetab</groupId>
<artifactId>semplice-multi</artifactId>
<versione>1.0</versione>
<packaging>pom</packaging>
<moduli>
<modulo>app</module>
<modulo>util</module>
</moduli>
</progetto>
Per riassumere, il POM di livello superiore specifica il tipo di confezionamento pom ed elenca esplicitamente tutti i sottomoduli.
Tieni presente che non devi preoccuparti dell'ordinamento mentre dichiari i sottomoduli nel Parent POM poiché Maven utilizza un Reactor per ordinare correttamente i moduli elencati. Nel simple-multi, Maven crea il modulo util e quindi l'app poiché l'app dipende da util.
5. Modulo POM
La cartella Module POM contiene una normale cartella di origine e il proprio file pom.xml. Il contenuto di questo util/pom.xml è:
util/pom.xml
<progetto xmlns=”http://maven.apache.org/POM/4.0.0″ xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>
<modelVersion>4.0.0</modelVersion>
<genitore>
<groupId>org.codetab</groupId>
<artifactId>semplice-multi</artifactId>
<versione>1.0</versione>
</genitore>
<artifactId>utility</artifactId>
<proprietà>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</proprietà>
<dipendenze>
<dipendenza>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<versione>3.6</versione>
</dipendenza>
<dipendenza>
<groupId>giugno</groupId>
<artifactId>giugno</artifactId>
<versione>4.12</versione>
<scope>test</scope>
</dipendenza>
</dipendenze>
</progetto>
Non è necessario specificare l'ID gruppo e la versione per il modulo poiché verranno ereditati dal genitore. Il blocco dependencies/dependency definisce le dipendenze del modulo util – commons-lang3 e JUnit.
Ora, diamo un'occhiata a app/pom.xml, che è abbastanza simile a util/pom.xml, ad eccezione del blocco delle dipendenze, mostrato di seguito:
app/pom.xml
….
<dipendenze>
<dipendenza>
<groupId>org.codetab</groupId>
<artifactId>utility</artifactId>
<versione>1.0</versione>
</dipendenza>
….
</dipendenze>
Il modulo app utilizza i metodi del modulo util e, per questo, app/pom.xml specifica util come dipendenza.
Per riassumere tutte le cose spiegate sopra:
Il progetto di primo livello (progetto genitore),
- Definisce pom.xml di livello superiore, che specifica tutte le coordinate e i sottomoduli e imposta il tipo di packaging come pom.
- Contiene le ulteriori cartelle dei moduli.
- Non contiene cartelle di origine.
Ciascuna delle cartelle dei moduli non è altro che normali directory di progetto Maven. Tuttavia, il file pom.xml contiene:
- L'elemento genitore specifica il genitore del modulo.
- Le coordinate del modulo sono specificate nell'elemento artefattoID. GroupID e versione non sono menzionati in quanto vengono ereditati dalle coordinate padre.
- La dipendenza, se un modulo dipende da un altro, è menzionata nell'elemento dependencies/dependency.
Esecuzione del progetto multimodulo
Il comando $ mvn clean package può essere utilizzato per compilare, testare e impacchettare il multi-modulo. Tuttavia, per eseguirlo con il plug-in maven-exec sono necessari i seguenti passaggi:
Esegui i seguenti comandi:
$ cd semplice-multi
$ mvn installazione pulita
$ mvn exec: java -pl app -Dexec.mainClass=app.App
Il comando install installa i moduli nel tuo repository locale, dove puoi quindi eseguire il progetto. L'opzione -pl app informa il plug-in exec sul modulo dell'app ed esegue la sua classe app.App. Senza installazione, il processo di compilazione non riesce, poiché Maven non è in grado di scaricare e risolvere la dipendenza del modulo util.
Tuttavia, è piuttosto macchinoso installare il progetto in un repository locale ogni volta prima di ogni esecuzione, specialmente durante la fase di sviluppo. Per facilitare ciò, puoi eseguire direttamente il multi-modulo in Eclipse IDE senza eseguire il passaggio di installazione.
Impara i corsi di sviluppo software online dalle migliori università del mondo. Guadagna programmi Executive PG, programmi di certificazione avanzati o programmi di master per accelerare la tua carriera.
Conclusione
Ci auguriamo che questo articolo ti abbia aiutato a iniziare con il processo Maven Multi-Module. Come con qualsiasi cosa nuova, si tratta solo di ottenere il blocco iniziale di esso. Dopo aver compreso la struttura e il funzionamento di base, sarai sulla buona strada per gestire senza problemi più moduli in Maven.
Se sei interessato a saperne di più sullo sviluppo di software full-stack, dai un'occhiata al programma Executive PG di upGrad & IIIT-B in Software Development - Specialization in Full Stack Development, progettato per i professionisti che lavorano e offre oltre 500 ore di formazione rigorosa, 9 + progetti e incarichi, stato di Alumni IIIT-B, progetti pratici pratici e assistenza sul lavoro con le migliori aziende.
Cosa sono i progetti multimodulo?
I moduli multipli consentono di raggruppare elementi comuni in un unico modulo per ridurre il numero di moduli necessari per creare e distribuire un progetto. I progetti multimodulo possono essere costruiti da due o più moduli definendo una relazione genitore-figlio tra questi moduli. Il modulo padre di un progetto multimodulo è chiamato modulo radice. Il modulo figlio di un progetto multimodulo è chiamato sottomodulo. Il modulo radice è la pietra angolare di una build multi-modulo. I moduli figlio non possono essere compilati da soli, devono essere compilati insieme al modulo radice.
Che cos'è un file del modello a oggetti del progetto in Maven?
Un file POM (Project Object Model) è un file che descrive un progetto. È l'unità di lavoro fondamentale con cui gli sviluppatori pubblicano gli artefatti in un repository. Un modello a oggetti di progetto è un semplice file di testo che definisce un progetto, ne elenca i componenti e ne definisce le operazioni. Il modello a oggetti del progetto è un componente chiave del framework di gestione dei progetti del software Maven. È un tipo speciale di documento XML di cui è composto un progetto Maven. Un file pom può essere pensato come una descrizione di un progetto. Dice a Maven di cosa tratta il progetto, oltre a una descrizione di ciascuno dei moduli nel progetto, delle loro dipendenze e versioni. I moduli sono gli elementi costitutivi di un progetto Maven. I moduli e le loro dipendenze vengono utilizzati per costruire il progetto finale.
Come creare un progetto multi-modulo esperto?
Per creare un progetto multi-modulo esperto, è necessario definire un pom padre e assicurarsi che tutti i sottomoduli lo ereditino. È anche importante notare che puoi anche mettere tutti i sottomoduli in un unico repository e puntare il padre pom su quello. Un progetto multi-modulo Maven è composto da un pom padre e uno o più sottomoduli. Il padre pom può definire i metadati del progetto Maven multi-modulo, come ID artefatto, versione, packaging e dipendenze. I sottomoduli possono ereditare i metadati del genitore e il pom padre può definire la configurazione del progetto di alto livello, come l'organizzazione e la descrizione del progetto.