Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在maven插件的不同类中注入@Parameter_Maven_Maven Plugin - Fatal编程技术网

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

在maven插件的不同类中注入@Parameter,maven,maven-plugin,Maven,Maven Plugin,我正在编写一个maven插件,根据我以前的经验,我知道我的mojo类最终会有一堆@参数来配置它。我想做的不是将这些配置参数注入到mojo类中,而是将它们注入到第二个仅配置的类中。这可能吗 目前我这样做的方式是mojo类只是构造一个配置对象,它在其中传递所有注入的参数。像这样的 @Mojo public class MyMojo extends AbstractMojo { private MyConfig myConfig; @Parameter private String m

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

目前我这样做的方式是mojo类只是构造一个配置对象,它在其中传递所有注入的参数。像这样的

@Mojo
public class MyMojo extends AbstractMojo {

  private MyConfig myConfig;

  @Parameter
  private String myArg1;

  ...

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

但这相当难看。我希望DI直接发生在Config中

如果MyConfig是一个pojo,您也可以在这里使用
@参数
,但是,您的配置如下所示:

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

您可以将您的
MyConfig
POJO用作
@参数

@Mojo
公共类MyMojo扩展了AbstractMojo{
@参数
私人MyConfig MyConfig;
...
}
映射复杂对象的规则如下所示:

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


但是,对
MyConfig
的字段使用
@参数
无效,请参见。

IIUC,然后我将执行
@参数private MyConfig MyConfig对吗?然后在上面,在MyConfig中注释参数?另外,你能详细说明第二个技巧吗?设置什么,注释在哪里,在字段中还是设置器中?啊,第二个技巧很棒!我会的。谢谢你,罗伯特
private MyConfig myConfig = new MyConfig();

@Parameter
private String someField;

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