我试图在mojo中使用字段上方的@Parameter
。
@Parameter(required = false)
public Map authentication;
在插件使用中,我通过了:
<configuration>
<authentication>
<user>a</user>
<server>
<address>server.com</address>
<port>123</port>
</server>
<authentication>
</configuration>
行为是maven似乎无法注入所有数据,只有<K,V>
这很简单,例如<user>
有String
但是<server>
我&# 39; m期望相同的行为,例如,另一个Map<K,V>
<address>
和<port>
,但maven注入null
答案 0 :(得分:0)
您可能想看一下Mapping Complex Objects文档。
如果我对您的理解正确,那么您想为“身份验证”配置设置,但是其值可以是任意键值,其中值可能是一些复杂的对象“服务器”,并且其“地址”和“端口”映射到正确的类型?
最好不要将其建模为Map,而是要有一些对象来表示此结构
public final class Server {
private String address;
private Integer port;
// getters
}
public final class Authentication {
private String user;
private Server server;
// getters
}
public final class MyMojo extends AbstractMojo {
@Parameter
private Authentication authentication;
}
这使您可以使用所提供的代码段配置。
如果我理解不正确,并且您实际上想要一个java.util.Map<K, V>
,您可以在其中提供任意值的身份验证,那么您可能不走运。我猜你可以让Authentication
类持有Map来做一些额外的事情:
public final class Authentication {
public String user;
public Server server;
public Map<String, String> other;
}
...
<properties>
<authentication>
<user>theUser</user>
<server>
<address>server.com</address>
<port>123</port>
</server>
<other>
<key1>value1</key1>
<key2>value2</key2>
</other>
</properties>
...
我的个人建议是采用明确建模所需结构的方法。这使您可以让Maven插件环境为您做尽可能多的检查。如果您拍摄任意地图,则必须进行各种编组。
一个缺点是Maven不能为复杂的对象提供一个很好的描述符,但是无论如何您都不会使用普通的Map来提供描述符。