Hi,
We can inject Maven components into plugins in many ways ...
We can use @Parameter, like:
@Parameter( defaultValue = "${project}", readonly = true, required =
true )
private MavenProject project;
@Parameter( defaultValue = "${session}", readonly = true, required =
true )
private MavenSession session;
@Parameter( defaultValue = "${mojoExecution}", readonly = true,
required = true )
private MojoExecution mojoExecution;
We can use DI with @org.apache.maven.plugins.annotations.Component
@Component
private MavenProject project;
@Component
private MavenSession session;
@Component
private MojoExecution mojoExecution;
We can use DI with @javax.inject.Inject on fields ...
@Inject
private MavenProject project;
@Inject
private MavenSession session;
@Inject
private MojoExecution mojoExecution;
And DI with constructor:
@Inject
public SuperMojo( MavenProject project, MavenSession session,
MojoExecution execution )
{
}
Which way should be preferred, which one to avoid? And why?
Can we use DI for all Maven components?
--
Sławomir Jaranowski