Leitfaden für den Maven-Archetyp

Anleitung zum Maven-Archetyp

1. Überblick

Ein Maven-Archetyp ist eine Abstraktion einer Art Projekt, die in ein konkretes angepasstes Maven-Projekt instanziiert werden kann. Kurz gesagt,it’s a template project template from which other projects are created.

Der Hauptvorteil der Verwendung von Archetypen besteht darin, die Projektentwicklung zu standardisieren und Entwicklern die Möglichkeit zu geben, Best Practices zu befolgen, während ihre Projekte schneller gebootet werden.

In diesem Tutorial erfahren Sie, wie Sie einen benutzerdefinierten Archetyp erstellen und anschließend ein Maven-Projekt übermaven-archetype-plugin.erstellen

2. Maven Archetype Descriptor

The Maven archetype descriptor is the heart of the archetype project. Es handelt sich um eine XML-Datei mit dem Namenarchetype-metadata.xml, die sich im VerzeichnisMETA-INF/mavendes JAR befindet.

Es wird verwendet, um die Metadaten der Archetypen zu beschreiben:



    
        
            bar
        
    

    
        
            src/main/java
            
                **/*.java
            
        
    

    
        
    

DasrequiredProperties-Tag wird zum Bereitstellen von Eigenschaften während der Projektgenerierung verwendet. Daher werden wir aufgefordert, Werte für sie anzugeben und den Standardwert zu akzeptieren.

fileSets, hingegen werden verwendet, um zu konfigurieren, welche Ressourcen in das konkret generierte Projekt kopiert werden. Eine gefilterte Datei bedeutet, dass Platzhalter während des Generierungsprozesses durch die angegebenen Werte ersetzt werden.

Wenn Siepackaged=”true” infileSet verwenden, werden ausgewählte Dateien zu der Ordnerhierarchie hinzugefügt, die durch diepackage -Eigenschaft angegeben wird.

Wenn Sie ein Projekt mit mehreren Modulen generieren möchten, kann das Tagmodules dazu beitragen, alle Module des generierten Projekts zu konfigurieren.

Beachten Sie, dass es sich bei dieser Datei um Archetyp 2 und höher handelt. In der Version 1.0.x hieß die Datei nurarchetype.xml und hatte eine andere Struktur.

Weitere Informationen finden Sie auf jeden Fall inofficial Apache docs.

3. So erstellen Sie einen Archetyp

An archetype is a normal Maven project with the following extra content:

  • src/main/resources/archetype-resources ist die Vorlage, aus der Ressourcen in das neu erstellte Projekt kopiert werden

  • src/main/resources/META-INF/maven/archetype-metadata.xml: ist der Deskriptor, mit dem die Metadaten der Archetypen beschrieben werden

Um einen Archetyp manuell zu erstellen, können wir mit einem neu erstellten Maven-Projekt beginnen und dann die oben genannten Ressourcen hinzufügen.

Oder wir können es mithilfe des Sandesarchetype-maven-plugin, generieren und dann den Inhalt des Verzeichnissesarchetype-resourcesund der Dateiarchetype-metadata.xmlanpassen.

Um den Archetyp zu generieren, können wir verwenden:

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

Wir können den Archetyp auch aus einem vorhandenen Maven-Projekt erstellen:

mvn archetype:create-from-project

Es wird intarget/generated-sources/archetype, generiert und kann verwendet werden.

Unabhängig davon, wie wir den Archetyp erstellt haben, erhalten wir die folgende Struktur:

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

Wir können jetzt mit dem Erstellen unseres Archetyps beginnen, indem wir Ressourcen im Verzeichnisarchetype-resourcesablegen und in der Dateiarchetype-metadata.xmlkonfigurieren.

4. Aufbau des Archetyps

Jetzt können wir unseren Archetyp anpassen. Als Höhepunkt dieses Prozesses werden wir die Erstellung eines einfachen Maven-Archetyps zum Generieren einer RESTful-Anwendung auf Basis von JAX-RS 2.1 vorstellen.

Nennen wir es einfachmaven-archetype.

4.1. Archetyp-Verpackung

Beginnen wir mit der Änderung vonpom.xml für das Archetypprojekt unterthe maven-archetype directory:

maven-archetype

Diese Art der Verpackung ist dank der Erweiterungarchetype-packagingverfügbar:


    
        
            org.apache.maven.archetype
            archetype-packaging
            3.0.1
        
    
    

4.2. Addieren derpom.xml

Erstellen wir nun einepom.xml-Datei im Verzeichnisarchetype-resources:



    ${groupId}
    ${artifactId}
    ${version}
    war

    
        
            javax.ws.rs
            javax.ws.rs-api
            2.1
            provided
        
    

Wie wir sehen können, sindgroupId, artifactId undversion parametrisiert. Sie werden bei der Erstellung eines neuen Projekts aus diesem Archetyp ersetzt.

Wir können alles, was für das generierte Projekt benötigt wird, wie Abhängigkeiten und Plugins, inpom.xml einfügen. Hier haben wir die JAX RS-Abhängigkeit hinzugefügt, da der Archetyp zum Generieren einer RESTful-basierten Anwendung verwendet wird.

4.3. Erforderliche Ressourcen hinzufügen

Als nächstes können wir Java-Code für unsere Anwendung inarchetype-resources/src/main/java hinzufügen.

Eine Klasse zum Konfigurieren der JAX-RS-Anwendung:

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

Und eine Klasse für eine Ping-Ressource:

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

Geben Sie abschließend die Serverkonfigurationsdateiserver.xml inarchetype-resources/src/main/config/liberty ein.

4.4. Metadaten konfigurieren

Nachdem wir alle benötigten Ressourcen hinzugefügt haben, können wir jetzt konfigurieren, welche während der Generierung durch diearchetype-metadata.xml-Datei kopiert werden.

Wir können unserem Archetyp mitteilen, dass alle Java-Quelldateien kopiert werden sollen:



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

Hier möchten wir, dass alle Java-Dateien aus dem Verzeichnissrc/main/javaund die Dateiserver.xmlaussrc/main/config/liberty,kopiert werden.

4.5. Archetyp installieren

Nachdem wir alles zusammengestellt haben, können wir den Archetyp installieren, indem wir diesen Befehl aufrufen:

mvn install

Zu diesem Zeitpunkt ist der Archetyp in der Dateiarchetype-catalog.xml, im lokalen Maven-Repository registriert und daher einsatzbereit.

5. Verwenden des installierten Archetyps

The maven-archetype-plugin allows the user to create a Maven project through the generate goal and existing archetype. Weitere Informationen zu diesem Plugin finden Sie unterhomepage.

Dieser Befehl verwendet dieses Plugin, um ein Maven-Projekt aus unserem Archetyp zu generieren:

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

Wir sollten dann die GAV unseres Archetyps als Argumente an das Ziel vonmaven-archetype-plugin:generateübergeben. Wir können auch die GAV des konkreten Projekts übergeben, das wir generieren möchten, andernfalls können wir sie im interaktiven Modus bereitstellen.

Das konkretecool-jaxrs-samplegenerierte Projekt kann daher ohne Änderungen ausgeführt werden. Also können wir es ausführen, indem wir einfach diesen Befehl aufrufen:

mvn package liberty:run

Wir können dann auf diese URL zugreifen:

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

6. Fazit

In diesem Artikel haben wir gezeigt, wie ein Maven-Archetyp erstellt und verwendet wird.

Wir haben gezeigt, wie der Archetyp erstellt und anschließend die Vorlagenressourcen über die Dateiarchetype-metadata.xmlkonfiguriert werden.

Der Code kann wie üblichover on Github gefunden werden.