我正在尝试在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>,就像具有String的<user>,但是对于<server>,我期望同样的行为,例如,具有<address>和<port>的另一个Map<K,V>,但是maven注入了null
发布于 2018-11-27 22:44:34
您可能想看看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类为额外的东西保存一个映射:
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-plugin环境为您做尽可能多的检查。如果你使用一个任意的map,那么你必须自己做各种编组。
一个缺点是Maven没有为复杂的对象提供一个很好的描述符,但是使用一个普通的Map无论如何都不会有这样的描述符。
https://stackoverflow.com/questions/49899611
复制相似问题