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

Reply via email to