Guida all'archetipo di Maven

1. Panoramica

Un archetipo Maven è un'astrazione di una sorta di progetto che può essere istanziato in un progetto Maven personalizzato concreto. In breve, è un modello di progetto modello da cui vengono creati altri progetti .

Il vantaggio principale dell'uso degli archetipi è standardizzare lo sviluppo del progetto e consentire agli sviluppatori di seguire facilmente le migliori pratiche mentre avviano i loro progetti più velocemente.

In questo tutorial vedremo come creare un archetipo personalizzato e poi come usarlo per generare un progetto Maven attraverso il plugin maven-archetype-.

2. Descrittore dell'archetipo di Maven

Il descrittore dell'archetipo Maven è il cuore del progetto dell'archetipo . È un file XML denominato archetype-metadata.xml e si trova nella directory META-INF / maven del jar.

È usato per descrivere i metadati degli archetipi:

   bar     src/main/java  **/*.java       

Il tag requiredProperties viene utilizzato per fornire proprietà durante la generazione del progetto. Pertanto, ci verrà chiesto di fornire valori per loro, con la scelta di accettare il valore predefinito.

fileSet, d'altra parte, vengono utilizzati per configurare quali risorse verranno copiate nel progetto generato concreto. Un file filtrato significa che i segnaposto verranno sostituiti con i valori forniti durante il processo di generazione.

Inoltre , utilizzando packaged = "true" nel fileSet , stiamo dicendo che i file selezionati verranno aggiunti alla gerarchia di cartelle specificata dalla proprietà del pacchetto .

Se vogliamo generare un progetto multi-modulo, i moduli tag possono aiutare a configurare tutti i moduli del progetto generato.

Nota che questo file riguarda Archetype 2 e versioni successive. Nella versione 1.0.x, il file si chiamava semplicemente archetype.xml e aveva una struttura diversa.

Per ulteriori informazioni, dai un'occhiata alla documentazione ufficiale di Apache.

3. Come creare un archetipo

Un archetipo è un normale progetto Maven con i seguenti contenuti extra :

  • src / main / resources / archetype-resources è il modello da cui le risorse vengono copiate nel progetto appena creato
  • src / main / resources / META-INF / maven / archetype-metadata.xml : è il descrittore usato per descrivere i metadati degli archetipi

Per creare un archetipo manualmente, possiamo iniziare con un progetto Maven appena creato e quindi aggiungere le risorse sopra menzionate.

Oppure possiamo generarlo utilizzando archetype-maven-plugin, quindi personalizzare il contenuto della directory archetype-resources e del file archetype-metadata.xml .

Per generare l'archetipo, possiamo utilizzare:

mvn archetype:generate -B -DarchetypeArtifactId=maven-archetype-archetype \ -DarchetypeGroupId=maven-archetype \ -DgroupId=com.baeldung \ -DartifactId=test-archetype

Possiamo anche creare l'archetipo da un progetto Maven esistente:

mvn archetype:create-from-project

Viene generato in target / generated-sources / archetype, pronto per essere utilizzato.

Non importa come abbiamo creato l'archetipo, ci ritroveremo con la seguente struttura:

archetype-root/ ├── pom.xml └── src └── main ├── java └── resources ├── archetype-resources │   ├── pom.xml │   └── src └── META-INF └── maven └── archetype-metadata.xml

Ora possiamo iniziare a costruire il nostro archetipo inserendo le risorse nella directory archetype-resources e configurandole nel file archetype-metadata.xml .

4. Costruire l'archetipo

Ora siamo pronti per personalizzare il nostro archetipo. Per evidenziare questo processo, mostreremo la creazione di un semplice archetipo Maven per generare un'applicazione RESTful basata su JAX-RS 2.1.

Chiamiamolo semplicemente maven-archetipo .

4.1. Archetipo di imballaggio

Cominciamo modificando il pom.xml del progetto archetype che si trova nella directory maven-archetype :

maven-archetype

This type of packaging is available thanks to the archetype-packaging extension:

   org.apache.maven.archetype archetype-packaging 3.0.1    

4.2. Adding the pom.xml

Let's now create a pom.xml file located under the archetype-resources directory:

 ${groupId} ${artifactId} ${version} war   javax.ws.rs javax.ws.rs-api 2.1 provided   

As we can see, groupId, artifactId and version are parameterized. They will be replaced during the creation of a new project from this archetype.

We can put everything needed by the generated project, like dependencies and plugins, in the pom.xml. Here, we've added the JAX RS dependency as the archetype will be used for generating RESTful based application.

4.3. Adding Required Resources

Next, we can add some Java code for our application in archetype-resources/src/main/java.

A class for configuring JAX-RS application:

package ${package}; // import @ApplicationPath("${app-path}") public class AppConfig extends Application { }

And a class for a ping resource:

@Path("ping") public class PingResource{ //... }

Finally, put the server configuration file, server.xml, in archetype-resources/src/main/config/liberty.

4.4. Configuring Metadata

After adding all needed resources, we can now configure which ones will be copied during generation through the archetype-metadata.xml file.

We can tell our archetype that we want all Java source files to be copied:

    src/main/java  **/*.java    src/main/config/liberty  server.xml    

Here, we want all Java files from src/main/java directory, and the server.xml file from src/main/config/liberty, to be copied.

4.5. Installing the Archetype

Now that we've finished putting it all together, we can install the archetype by invoking this command:

mvn install

At this point, the archetype is registered in the file archetype-catalog.xml, located in Maven local repository, and therefore ready for use.

5. Using the Installed Archetype

The maven-archetype-plugin allows the user to create a Maven project through the generate goal and existing archetype. For more information on this plugin, you can visit the homepage.

This command uses this plugin to generate a Maven project from our archetype:

mvn archetype:generate -DarchetypeGroupId=com.baeldung.archetypes -DarchetypeArtifactId=maven-archetype -DarchetypeVersion=1.0-SNAPSHOT -DgroupId=com.baeldung.restful -DartifactId=cool-jaxrs-sample -Dversion=1.0-SNAPSHOT

Dovremmo quindi passare il GAV del nostro archetipo come argomento a maven-archetype-plugin: generate goal. Possiamo anche passare i GAV del progetto concreto che vogliamo generare, altrimenti possiamo fornirli in modalità interattiva.

Il progetto generato da concrete cool-jaxrs-sample è quindi pronto per essere eseguito senza modifiche. Quindi, possiamo eseguirlo semplicemente invocando questo comando:

mvn package liberty:run

Possiamo quindi accedere a questo URL:

//localhost:9080/cool-jaxrs-sample//ping

6. Conclusione

In questo articolo, abbiamo mostrato come costruire e utilizzare un archetipo Maven.

Abbiamo dimostrato come creare l'archetipo e poi come configurare le risorse del modello tramite il file archetype-metadata.xml .

Il codice, come al solito, può essere trovato su Github.