Java Maven Mojo:复杂映射属性
在maven.apache.org中提到的mojo的map属性的示例非常简单,因为它定义了一个映射,该映射使用字符串作为键和值,如下所述:
/**
* My Map.
*/
@Parameter
private Map myMap;
它的配置如下所示:
<myMap>
<key1>value1</key1>
<key2>value2</key2>
</myMap>
我试图实现的是一个更高级的映射,它以字符串作为键,以我自己定义的类Person作为值:
/**
* My Advanced Map.
*/
@Parameter
private Map<String,Person> myMap;
Person类与my MOJO位于同一个包中,它看起来像:
public class Person {
private String name;
private int age;
public void setName( String name )
{
this.name = name;
}
public void setAge( int age )
{
this.age = age;
}
public String getName( )
{
return this.name;
}
public int getAge( )
{
return this.age ;
}
}
我假设我的MOJO的配置如下:
<myMap>
<firstPerson>
<person>
<name>steve</name>
<age>26</age>
</person>
</firstPerson>
<secondPerson>
<person>
<name>meruem</name>
<age>1</age>
</person>
</secondPerson>
</myMap>
使用上面的配置运行这个MOJO将使用定义的键创建映射,但我总是得到空值:{firstPerson=null,secondPerson=null}
目前,我不知道我是否做错了什么,或者这个例子是否得到了支持,因为还没有找到描述“高级”地图属性的文档,目前我的最后手段是浏览源代码
# 1 楼答案
实际上,你已经非常接近解决方案了。你只需要像这样配置你的插件(没有内部的
<person>
元素):为您提供一个完整的工作示例,请考虑下面的Maven插件POM:
具有以下MOJO,声明一个目标
foo
,并具有一个类型为Map<String, Person>
的参数,它只是将地图记录为信息:以及以下
Person
类:一旦这个Maven插件安装在repo中(使用^{),我们就可以在这样的项目中使用它:
运行
mvn clean generate-sources
时,此插件的输出为:# 2 楼答案
在Person类的name和age属性中添加@Parameter注释