Maven MOJO依赖项注入和参数

Maven MOJO依赖项注入和参数,maven,maven-plugin,plexus,Maven,Maven Plugin,Plexus,当使用Plexus for MOJO plugin DI时,有没有一种方法可以将MOJO配置参数(在MOJO类中用@parameter注释)也注入到其他组件中 换句话说:除了在其他组件中注入Mojo本身,或者求助于手动滚动的“init方法”,还有什么方法可以与其他Plexus组件共享Mojo参数吗?我有点希望参数将由DI上下文管理 假设我有一种像这样的魔力: @Mojo public class MyMojo extends AbstractMojo { @Parameter

当使用Plexus for MOJO plugin DI时,有没有一种方法可以将MOJO配置参数(在MOJO类中用
@parameter
注释)也注入到其他组件中

换句话说:除了在其他组件中注入Mojo本身,或者求助于手动滚动的“init方法”,还有什么方法可以与其他Plexus组件共享Mojo参数吗?我有点希望参数将由DI上下文管理

假设我有一种像这样的魔力:

@Mojo
public class MyMojo extends AbstractMojo {

    @Parameter
    private String param;

    @Inject
    private SomeComponent component;
}
@Named
public class SomeComponent {
    @Inject // or whatever else
    private String param;

    // some methods that use param here
}
这样做会很好:

@Mojo
public class MyMojo extends AbstractMojo {

    @Parameter
    private String param;

    @Inject
    private SomeComponent component;
}
@Named
public class SomeComponent {
    @Inject // or whatever else
    private String param;

    // some methods that use param here
}
而不是必须这样做:

@Mojo
public class MyMojo extends AbstractMojo {

    @Parameter
    private String param;

    @Inject
    private SomeComponent component;

    @Override
    public void execute() throws MojoExecutionException {
        component.setParam(param);
        ...
    }
}

请记住,
SomeComponent
可以在Maven插件之外使用,因为它是一个(可重用的)组件。如果它与你的魔力有那么密切的关系,也许设计中有问题,你不应该一开始就拥有它。此外,组件通常是不可变的和线程安全的;不建议有一个二传手。是什么使它与魔咒密切相关?它希望注入字符串这一事实?它不再是二传手了。注入它只是一种避免样板文件的方法。事实上,在从插件使用它的上下文中,它希望注入一个字符串。如果Mojo在同一个构建中使用两次,使用不同的
param
,会发生什么情况
SomeComponent
是共享的,它是将被注入的同一个实例(默认情况下,但您不能从插件端真正更改它)。好的,所以问题仍然是:如何将组件的配置外部化?问题是,
param
不是组件的配置元素,因为它会改变,而组件不会改变。它不应该保持任何状态。您可以将该值作为参数传递,
myComponent.doTheFoo(param)该方法执行某些操作,但不改变组件。换句话说,插件知道组件,但不是相反。请记住,
SomeComponent
可以在Maven插件之外使用,因为它是一个(可重用的)组件。如果它与你的魔力有那么密切的关系,也许设计中有问题,你不应该一开始就拥有它。此外,组件通常是不可变的和线程安全的;不建议有一个二传手。是什么使它与魔咒密切相关?它希望注入字符串这一事实?它不再是二传手了。注入它只是一种避免样板文件的方法。事实上,在从插件使用它的上下文中,它希望注入一个字符串。如果Mojo在同一个构建中使用两次,使用不同的
param
,会发生什么情况
SomeComponent
是共享的,它是将被注入的同一个实例(默认情况下,但您不能从插件端真正更改它)。好的,所以问题仍然是:如何将组件的配置外部化?问题是,
param
不是组件的配置元素,因为它会改变,而组件不会改变。它不应该保持任何状态。您可以将该值作为参数传递,
myComponent.doTheFoo(param)该方法执行某些操作,但不改变组件。换句话说,插件知道组件,但不是相反。