Maven MOJO依赖项注入和参数
当使用Plexus for MOJO plugin DI时,有没有一种方法可以将MOJO配置参数(在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
@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)代码>该方法执行某些操作,但不改变组件。换句话说,插件知道组件,但不是相反。