You can extends the class org.apache.maven.AbstractMavenLifecycleParticipant see javadoc.
Create a Maven project with a dependency on org.apache.maven:maven-core:3.3.0 and other dependencies :
<groupId>org.apache.maven.extensions</groupId>
<artifactId>beer-maven-lifecycle</artifactId>
<version>1.0-SNAPSHOT</version>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.0.4</version>
</dependency>
<!-- dependency for plexus annotation -->
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-annotations</artifactId>
<version>1.5.5</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>Create your extension class
// your extension must be a "Plexus" component so mark it with the annotation
@Component( role = AbstractMavenLifecycleParticipant.class, hint = "beer")
public class BeerMavenLifecycleParticipant extends AbstractMavenLifecycleParticipant
{
@Override
public void afterSessionStart( MavenSession session )
throws MavenExecutionException
{
// start the beer machine
}
@Override
public void afterProjectsRead( MavenSession session )
throws MavenExecutionException
{
// ask a beer to the machine
}
}Generate plexus metadatas during building your extension jar
<build>
...
<plugins>
...
<plugin>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-component-metadata</artifactId>
<version>1.5.5</version>
<executions>
<execution>
<goals>
<goal>generate-metadata</goal>
</goals>
</execution>
</executions>
</plugin>
...
</plugins>
...
</build>You have two ways to use your extension within your builds:
NOTE: if you use a build extension mechanism the method afterSessionStart won't be called
Use a extension in your project, declare as it in your pom:
<build>
...
<extensions>
...
<extension>
<groupId>org.apache.maven.extensions</groupId>
<artifactId>beer-maven-lifecycle</artifactId>
<version>1.0-SNAPSHOT</version>
</extension>
...
</extensions>
...
</build>