[P1.1] Name the Mojo class <Operation name>Mojo extends AbstractMojo. Always use the javadoc style of Mojo annotation as follows:
/** * ... * @author Rusi Popov */ @Mojo(name="<goal name of this mojo in kebab case>", defaultPhase=LifecyclePhase.COMPILE ) @Execute(phase=LifecyclePhase.COMPILE) public class <Purpose of this Mojo>Mojo extends CompilationContext ...
[P1.2] Always use the java Mojo annotations for parameters:
/** * The file to produce */ @Parameter(required=true) private File targetFile; /** * Selection of all modelant Templates below sourceDirectory */ @Parameter private FileSet fileSet; /** * Where to generate the API sources */ @Parameter(property="project.build.sourceDirectory", required=true) private File sourceDirectory; /** * Where the work files are located */ @Parameter(property="project.build.directory", required=true) private File workDirectory;
[P1.3] Mojo logging - use the Maven-provided logging mechanism:
getLog().warn("warning..."); ... if (getLog().isDebugEnabled()) { getLog().debug("debug..."); }
[P1.4] When including the mojo in artifacts generated by modelant, refer both the goal name and execution phase (no matter the phase has a default) to make the binding explicit. Then anyone else would not need to read the Mojo to identify when it is activated:
<executions> <execution> <phase>generate-sources</phase> <goals> <goal>generate-model-api</goal> </goals> <configuration> <metamodelFile>${metamodelUrl}</metamodelFile> </configuration> </execution> </executions>
[P5] When including the Mojo in manually written artifacts it is enough to provide just the goal name (the phase is by default, no need of <id>,..):
<executions> <execution> <goals> <goal>compile-templates</goal> </goals> </execution> </executions>
Maven will use the default phase from the [class’ annotation to bind the plugin](http://maven.apache.org/guides/mini/guide-configuring-plugins.html#Mapping_Complex_Objects Mapping Complex Objects in Maven).
[P2.1] As of Maven Dependencies, when referring the JAVA platform tools or other platform libraries as dependencies (not published as Maven artifacts) use:
For example:
<dependency> <groupId>java.tools</groupId> <artifactId>dt</artifactId> <version>1.8</version> <scope>system</scope> <systemPath>**${java.home}**/../lib/tools.jar</systemPath> </dependency>
Note: This definition causes problems under Eclipse with default setup with default Java setup under Windows, because of the spaces in the path. Therefore apply the [[modelant - migration to maven#Eclipse_Setup_Procedure_for_Windows|Eclipse Setup Procedure for Windows]]