Suche…


Einführung

Mit Maven können Sie benutzerdefinierte Plugins implementieren und verwenden. Mit diesen Plugins kann zusätzliches Verhalten an jede Phase des Maven-Lebenszyklus gebunden werden.

Jedes Maven-Ziel wird erstellt, indem ein MOJO (Maven Ordinary Java Object) implementiert wird: eine mit Annotationen implementierte Java-Klasse, die beschreibt, wie sie aufgerufen wird.

Das Zielpräfix eines Plugins wird von seinem Artefaktnamen abgeleitet. Ein Artefakt- hello-world-plugin erstellt ein Ziel-Präfix- hello-world . Das hello Ziel kann dann mit mvn hello-world:hello .

Bemerkungen

Ein Maven-Plugin ist eine JAR- maven/plugins.xml , die eine maven/plugins.xml , die die Plugin-Metadaten beschreibt. Diese Datei wird vom maven-plugin-plugin generiert.

Maven-Artefakt als Maven-Plugin deklarieren

Ein von Maven erstelltes Artefakt kann als Maven-Plugin deklariert werden, indem die Verpackung als maven-plugin in pom.xml .

<packaging>maven-plugin</packaging>

Sie müssen eine Abhängigkeit von der Plugin-API und den Anmerkungen angeben.

<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>

Sie müssen ein Plugin hinzufügen, um die Metadaten zu generieren.

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

Ein Ziel schaffen

Ziele werden durch Erstellen eines MOJO implementiert. Dies ist eine Klassendatei, die mit Anmerkungen von maven-plugin-annotations .

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

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

Plugin-Konfiguration verwenden

Plugins können durch Annotieren von Feldern mit @Parameter konfiguriert werden. Dem MOJO wird dann die Konfiguration injiziert.

@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);
    }
}

Der name Parameter kann im POM konfiguriert werden:

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

Wenn das greet als eigenständiges Ziel ausgeführt wird, kann der name Parameter als Eigenschaft in der Befehlszeile definiert werden:

mvn <plugin name>:greet -Dname=Geri

Zugriff auf die Projektinformationen

Das Plugin kann unter anderem auf Informationen zum aktuellen Maven-Projekt zugreifen, das gerade erstellt wird.

@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());
    }
}

Das obige Beispiel würde den Namen des Maven-Projekts, auf dem es ausgeführt wird, in der Konsole ausgeben, der im Element <project>/<name> seines POM angegeben ist.

Die im Plugin verwendete MavenProject Klasse erfordert eine Abhängigkeit von maven-core mit einem (Standard-) compile im POM des Plugins:

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

Die Verwendung von Annotationen erfordert außerdem die folgende Abhängigkeit im POM des Plugins:

<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>

Deklarieren Sie eine Standardphase für ein Ziel

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

Holen Sie sich das Build-Verzeichnis als Datei

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow