在maven插件中的不同类中注入@Parameter

时间:2013-12-20 05:26:36

标签: maven maven-plugin

我正在编写一个maven插件,根据我以前的经验,我知道我的mojo类最终会有一堆@Parameter来配置它。我想要做的是不是将这些配置参数注入mojo类中,我想将它们注入第二个仅配置类中。这可能吗?

我这样做的当前方式是mojo类只构造一个Configuration对象,它传递所有注入的参数。像这样的东西

@Mojo
public class MyMojo extends AbstractMojo {

  private MyConfig myConfig;

  @Parameter
  private String myArg1;

  ...

  public void execute() {
     myConfig = new MyConfig(myArg1, myArg2, ...);
  }
}

但这很难看。我希望DI直接发生在 Config

2 个答案:

答案 0 :(得分:3)

如果MyConfig是pojo,你也可以在这里使用@Parameter,但是,你的配置看起来像:

<configuration>
  <myConfig>
    <someField>value</someField>
  </myConfig>
</configuration>

第二个技巧是使用setter,因为@ Parameter-annotated字段将使用匹配的公共setter(如果有的话)。

private MyConfig myConfig = new MyConfig();

@Parameter
private String someField;

// matching setter for @parameter-annotated field
public void setSomeField( String field )
{
  myConfig.setSomeField( field );
}

答案 1 :(得分:1)

您可以将MyConfig POJO用作@Parameter

@Mojo
public class MyMojo extends AbstractMojo {
    @Parameter
    private MyConfig myConfig;

    ...
}
  

映射复杂对象的规则如下:

     
      
  • 必须有一个私有字段,该字段对应于要映射的元素的名称。因此,在我们的情况下,person元素必须映射到mojo中的person字段。
  •   
  • 实例化的对象必须与Mojo本身位于同一包中。因此,如果您的mojo位于com.mycompany.mojo.query中,则映射机制将在该程序包中查找名为Person的对象。如您所见,该机制将大写元素名称的首字母,并使用该字母搜索要实例化的对象。
  •   

Source

但是,对@Parameter字段使用MyConfig无效,请参见this thread