首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mojo复杂依赖注入

Mojo复杂依赖注入
EN

Stack Overflow用户
提问于 2018-04-18 20:22:11
回答 1查看 155关注 0票数 0

我正在尝试在mojo中使用字段上方的@Parameter

代码语言:javascript
复制
@Parameter(required = false)
public Map authentication;

在插件用法中,我传递了:

代码语言:javascript
复制
<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

EN

回答 1

Stack Overflow用户

发布于 2018-11-27 22:44:34

您可能想看看Mapping Complex Objects文档。

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

最好不要将其建模为Map,而是使用一些对象来表示此结构

代码语言:javascript
复制
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类为额外的东西保存一个映射:

代码语言:javascript
复制
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无论如何都不会有这样的描述符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49899611

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档