Mojo 复合依赖注入



我正在尝试在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>的情况下,我期待相同的行为,例如,另一个具有<address><port>Map<K,V>,但 maven 注入null

您可能想查看映射复杂对象文档。

如果我理解正确,您想为"身份验证"配置一个设置,但其值是任意键值,其中值可能是一些复杂的对象"服务器",并将其"地址"和"端口"映射到正确的类型?

最好不要将其建模为 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 插件环境为您进行尽可能多的检查。如果你拿一张任意的地图,那么你必须自己做各种各样的编组。

一个缺点是 Maven 没有为复杂对象提供一个很好的描述符,但无论如何你都不会有一个普通的地图。

相关内容

  • 没有找到相关文章

最新更新