Szukaj…


Wprowadzenie

Maven umożliwia wdrażanie i używanie niestandardowych wtyczek. Wtyczki te pozwalają powiązać dodatkowe zachowanie z dowolną fazą cyklu życia Maven.

Każdy cel Maven jest tworzony przez implementację MOJO (Maven Ordinary Java Object): klasy Java zaimplementowanej z adnotacjami opisującymi sposób jego wywołania.

Prefiks celu wtyczki pochodzi od jej nazwy artefaktu. hello-world-plugin artefaktu hello-world-plugin tworzy przedrostek celu hello-world . Cel hello można następnie uruchomić w mvn hello-world:hello .

Uwagi

Wtyczka Maven to plik JAR zawierający plik maven/plugins.xml opisujący metadane wtyczki. Ten plik jest generowany przez maven-plugin-plugin .

Deklarowanie artefaktu Maven jako wtyczki Maven

Artefakt zbudowany przez Maven można zadeklarować jako wtyczkę Maven, określając opakowanie jako maven-plugin w pom.xml .

<packaging>maven-plugin</packaging>

Musisz zadeklarować zależność od interfejsu API wtyczki i adnotacji.

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

Musisz dodać wtyczkę, aby wygenerować metadane.

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

Tworzenie celu

Cele są realizowane poprzez utworzenie MOJO. Jest to plik klasy opatrzony adnotacjami z adnotacji maven-plugin-annotations .

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

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

Korzystanie z konfiguracji wtyczki

Wtyczki można skonfigurować, @Parameter adnotacje do pól @Parameter . MOJO jest następnie wstrzykiwany z konfiguracją.

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

Parametr name można skonfigurować w POM:

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

Jeśli cel greet jest uruchamiany jako samodzielny cel, parametr name można zdefiniować jako właściwość w wierszu polecenia:

mvn <plugin name>:greet -Dname=Geri

Dostęp do informacji o projekcie

Wtyczka może m.in. uzyskiwać dostęp do informacji o aktualnie budowanym projekcie Maven.

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

Powyższy przykład wypisałby w konsoli nazwę projektu Maven, na którym jest uruchamiany, który jest określony w elemencie <project>/<name> jego POM.

Klasa MavenProject zastosowana we wtyczce wymaga zależności maven-core z (domyślnym) zakresem compile w POM wtyczki:

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

Ponadto używanie adnotacji wymaga następującej zależności w POM wtyczki:

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

Zadeklaruj domyślną fazę dla celu

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

Pobierz katalog kompilacji jako plik

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


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow