Apache Maven
Utwórz wtyczkę Maven
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;