Apache Maven
Skapa ett Maven-plugin
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;