Sök…


Introduktion

Med Maven kan du implementera och använda anpassade plugins. Dessa plugins tillåter ytterligare beteende att vara bundna till alla faser i Maven-livscykeln.

Varje Maven-mål skapas genom att implementera ett MOJO (Maven Ordinary Java Object): en Java-klass implementerad med kommentarer som beskriver hur man ska åberopa det.

Målet prefix för en plugin härrör från dess artefakt namn. Ett artefakt hello-world-plugin skapar ett målprefix hello-world . hello kan sedan köras med mvn hello-world:hello .

Anmärkningar

En Maven-plugin är en JAR som innehåller en maven/plugins.xml som beskriver plugin-metadata. Denna fil genereras av maven-plugin-plugin .

Att förklara en Maven-artefakt som en Maven-plugin

En artefakt byggd av Maven kan förklaras som en Maven-plugin genom att specificera förpackningen som maven-plugin i pom.xml .

<packaging>maven-plugin</packaging>

Du måste förklara ett beroende av plugin-API: et och anteckningar.

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

Du måste lägga till ett plugin för att generera metadata.

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

Skapa ett mål

Mål implementeras genom att skapa en MOJO. Detta är en klassfil som kommenteras med kommentarer från maven-plugin-annotations .

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

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

Med hjälp av plugin-konfiguration

Plugins kan konfigureras genom att kommentera fält med @Parameter . MOJO injiceras sedan med konfigurationen.

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

Det name parameter kan konfigureras i POM:

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

Om greet målet drivs som ett fristående mål att name parametern kan definieras som egendom på kommandoraden:

mvn <plugin name>:greet -Dname=Geri

Få åtkomst till projektinformationen

Plugin kan bland annat komma åt information om det aktuella Maven-projektet som byggs.

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

Ovanstående exempel skulle skriva ut i konsolen namnet på Maven-projektet som det körs på, vilket anges i <project>/<name> -elementet i dess POM.

MavenProject klassen som används i plugin- maven-core kräver ett beroende av maven-core med ett (standard) compile i pluginens POM:

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

Användning av kommentarer kräver dessutom följande beroende i pluginens POM:

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

Förklara en standardfas för ett mål

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

Hämta build-katalogen som en fil

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


Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow