Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
Java Maven Mojo:复杂映射属性_Java_Maven_Maven Plugin_Maven Mojo - Fatal编程技术网

Java Maven Mojo:复杂映射属性

Java Maven Mojo:复杂映射属性,java,maven,maven-plugin,maven-mojo,Java,Maven,Maven Plugin,Maven Mojo,中提到的mojo的map属性示例非常简单,因为它定义了一个映射,其中包含一个字符串作为键和一个值,如下所述: /** * My Map. */ @Parameter private Map myMap; 其分配的配置如下所示: <myMap> <key1>value1</key1> <key2>value2</key2> </myMap> 我假设我的MOJO的配置如下所示: <myMap> <

中提到的mojo的map属性示例非常简单,因为它定义了一个映射,其中包含一个字符串作为键和一个值,如下所述:

/**
 * My Map.
 */
@Parameter
private Map myMap;
其分配的配置如下所示:

<myMap>
 <key1>value1</key1>
 <key2>value2</key2>
</myMap>
我假设我的MOJO的配置如下所示:

<myMap>
  <firstPerson>
    <person>
      <name>steve</name>
      <age>26</age>
    </person>
  </firstPerson>
  <secondPerson>
    <person>
      <name>meruem</name>
      <age>1</age>
    </person>
  </secondPerson>
</myMap>

史提夫
26
梅鲁姆
1.
使用上面的配置运行这个MOJO将使用定义的键创建映射,但我总是得到空值:{firstPerson=null,secondPerson=null}


目前,,我不知道我是否做错了什么,或者这个例子是否得到了支持,因为还没有找到描述“高级”地图属性的文档,我现在的最后手段是浏览源代码。

在Person类的name和age属性中添加@Parameter注释。

实际上,您已经非常接近了解决方案。您只需要像这样配置插件(没有内部的
元素):


史提夫
26
梅鲁姆
1.

为您提供一个完整的工作示例,请考虑下面的Maven插件POM:


4.0.0
sample.plugin
测试maven插件
1.0.0
maven插件
org.apache.maven
maven插件api
2
org.apache.maven.plugin-tools
maven插件注释
3.4
假如
具有以下MOJO,声明一个目标
foo
,并具有一个类型为
Map
的参数,该参数仅将Map记录为info:

@Mojo(name = "foo")
public class MyMojo extends AbstractMojo {

    @Parameter
    private Map<String, Person> map;

    public void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info(map.toString());
    }

}
一旦在repo中安装了这个Maven插件(使用
mvn clean install
),我们就可以在这样的项目中使用它:


sample.plugin
测试maven插件
1.0.0
福
生成源
福
名字1
10
名称2
20
运行
mvn clean generate sources
时,此插件的输出为:

[INFO]——测试maven插件:1.0.0:foo(添加源代码)@test---
[INFO]{person1=Person[name=name 1,年龄=10],person2=Person[name=name 2,年龄=20]}

钥匙在您的箱子里会是什么?那个人的名字?还是Person类的多个属性的组合?关键是一个用于识别Person的属性。我认为这也不起作用,在浏览源代码时,我进入了MapConverter类,它实例化了Map对象,但convert方法始终将Map的值视为字符串而不是对象。感谢您提供了详细的示例。我已经给你赏金了。
<myMap>
  <firstPerson>
    <person>
      <name>steve</name>
      <age>26</age>
    </person>
  </firstPerson>
  <secondPerson>
    <person>
      <name>meruem</name>
      <age>1</age>
    </person>
  </secondPerson>
</myMap>
@Mojo(name = "foo")
public class MyMojo extends AbstractMojo {

    @Parameter
    private Map<String, Person> map;

    public void execute() throws MojoExecutionException, MojoFailureException {
        getLog().info(map.toString());
    }

}
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 name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person [name=" + name + ", age=" + age + "]";
    }

}