Recherche…


Introduction

Maven vous permet d'implémenter et d'utiliser des plugins personnalisés. Ces plug-ins permettent à un comportement supplémentaire d'être lié à n'importe quelle phase du cycle de vie de Maven.

Chaque objectif Maven est créé en implémentant un objet Java MOJO (Maven Ordinary Java Object): une classe Java implémentée avec des annotations qui décrivent comment l'invoquer.

Le préfixe d'objectif d'un plugin est dérivé de son nom d'artefact. Un hello-world-plugin artefact hello-world-plugin crée un préfixe d'objectif hello-world . Le but hello peut alors être exécuté avec mvn hello-world:hello .

Remarques

Un plugin Maven est un JAR contenant un maven/plugins.xml qui décrit les métadonnées du plugin. Ce fichier est généré par le maven-plugin-plugin .

Déclarer un artefact Maven en tant que plugin Maven

Un artefact construit par Maven peut être déclaré en tant que plug-in Maven en spécifiant le maven-plugin comme maven-plugin dans le pom.xml .

<packaging>maven-plugin</packaging>

Vous devez déclarer une dépendance à l'API du plug-in et aux annotations.

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-plugin-api</artifactId>
    <version>3.3.9</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.maven.plugin-tools</groupId>
    <artifactId>maven-plugin-annotations</artifactId>
    <version>3.5</version>
    <scope>provided</scope>
</dependency>

Vous devez ajouter un plug-in pour générer les métadonnées.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-plugin-plugin</artifactId>
    <version>3.5</version>
</plugin>

Créer un objectif

Les objectifs sont mis en œuvre en créant un MOJO. Ceci est un fichier de classe annoté avec des annotations de maven-plugin-annotations .

@Mojo(name = "hello")
public final class HelloWorldMojo extends AbstractMojo {

    public void execute() throws MojoExecutionException, MojoFailureException {
         getLog().info("Hello world");
    }
}

Utiliser la configuration du plugin

Les plugins peuvent être configurés en annotant des champs avec @Parameter . Le MOJO est ensuite injecté avec la configuration.

@Mojo(name = "greet")
public final class GreetMojo extends AbstractMojo {

    @Parameter(required = true)
    public String name;

    public void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info("Hello " + name);
    }
}

Le paramètre name peut être configuré dans le POM:

<plugin>
    <groupId>com.mattunderscore</groupId>
    <artifactId>hello-world-plugin</artifactId>
    <version>1.0-SNAPSHOT</version>
    <configuration>
        <name>Matt</name>
    </configuration>
</plugin>

Si l'objectif greet est exécuté en tant qu'objectif autonome, le paramètre name peut être défini en tant que propriété sur la ligne de commande:

mvn <plugin name>:greet -Dname=Geri

Accéder aux informations du projet

Le plug-in peut, entre autres, accéder à des informations sur le projet Maven en cours de construction.

@Mojo(name = "project")
public final class ProjectNameMojo extends AbstractMojo {

    @Parameter(defaultValue = "${project}", readonly = true, required = true)
    private MavenProject project;

    public void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info("Hello, this is " + project.getName());
    }
}

L'exemple ci-dessus imprimera dans la console le nom du projet Maven sur lequel il est exécuté, qui est spécifié dans l'élément <project>/<name> de son POM.

La classe MavenProject utilisée dans le plugin nécessite une dépendance de maven-core avec une étendue de compile (par défaut) dans le POM du plugin:

<dependency>
    <groupId>org.apache.maven</groupId>
    <artifactId>maven-core</artifactId>
    <version>3.3.9</version>
</dependency>

De plus, l' utilisation des annotations nécessite la dépendance suivante dans le POM du plugin:

<dependency>
  <groupId>org.apache.maven.plugin-tools</groupId>
  <artifactId>maven-plugin-annotations</artifactId>
  <version>3.5</version>
  <scope>provided</scope> <!-- annotations are needed only to build the plugin -->
</dependency>

Déclarez une phase par défaut pour un objectif

@Mojo(name = "hi", defaultPhase = LifecyclePhase.COMPILE)

Récupère le répertoire de construction en tant que fichier

@Parameter(defaultValue = "${project.build.directory}")
private File buildDirectory;


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow