Zoeken…


Invoering

Met Maven kunt u aangepaste plug-ins implementeren en gebruiken. Met deze plug-ins kan extra gedrag worden gebonden aan elke fase van de Maven-levenscyclus.

Elk Maven-doel wordt gemaakt door het implementeren van een MOJO (Maven Ordinary Java Object): een Java-klasse geïmplementeerd met annotaties die beschrijft hoe deze kan worden opgeroepen.

Het doelvoorvoegsel van een plug-in is afgeleid van de artefactnaam. Een artefact hello-world-plugin creëert een doelprefix hello-world . Het hello doel kan dan worden uitgevoerd met mvn hello-world:hello .

Opmerkingen

Een Maven-plug-in is een JAR met een maven/plugins.xml plug- maven/plugins.xml die de metagegevens van de plug-in beschrijft. Dit bestand wordt gegenereerd door de maven-plugin-plugin .

Een Maven-artefact verklaren als een Maven-plug-in

Een artefact gebouwd door Maven kan worden verklaard als een Maven-plug-in door de verpakking op te geven als maven-plugin in in de pom.xml .

<packaging>maven-plugin</packaging>

U moet een afhankelijkheid van de plug-in-API en annotaties aangeven.

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

U moet een plug-in toevoegen om de metagegevens te genereren.

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

Een doel creëren

Doelen worden geïmplementeerd door een MOJO te maken. Dit is een klassebestand geannoteerd met annotaties van maven-plugin-annotations .

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

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

Plug-inconfiguratie gebruiken

Plug-ins kunnen worden geconfigureerd door velden te annoteren met @Parameter . De MOJO wordt vervolgens geïnjecteerd met de configuratie.

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

De name parameter kan in de POM worden geconfigureerd:

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

Als de greet doel wordt uitgevoerd als een standalone doel de name parameter kan worden gedefinieerd als woning op de opdrachtregel:

mvn <plugin name>:greet -Dname=Geri

Toegang tot de projectinformatie

De plug-in heeft onder andere toegang tot informatie over het huidige Maven-project dat wordt gebouwd.

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

In het bovenstaande voorbeeld wordt in de console de naam afgedrukt van het Maven-project waarop het wordt uitgevoerd, dat is opgegeven in het element <project>/<name> van de bijbehorende POM.

De klasse MavenProject die in de plug-in wordt gebruikt, vereist een afhankelijkheid van maven-core met een (standaard) compile in de POM van de plug-in:

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

Verder vereist het gebruik van annotaties de volgende afhankelijkheid in de POM van de plug-in:

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

Declareer een standaardfase voor een doel

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

Download de build-map als een bestand

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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow