自定义类型转换为Mojo的配置呢?(Custom type converter for Mojo c

2019-10-16 14:47发布

我需要使用自定义的类型,例如, LunarDate ,在我的魔对象:

class MyMojo extends AbstractMojo {

    /** @parameter */
    LunarDate lunarDate;

}

我想配置参数<configuration>在pom.xml的部分。

<configuration>
     <lunarDate>丁丑年二月初四</lunarDate>
</configuration>

(类型LunarDate仅仅是一个例子来说明的问题)

我已经举行的类型转换器,但如何让他们?

Answer 1:

DefaultBeanConfigurator负责使用DefaultConverterLookup ,并直接对其进行实例化,而无需使用丛集装箱。

我你可能想复制和修改它的新建扩建,而是通过注册您的副本@Component(role=BeanConfigurator.class)可能没有任何效果; 我试图从创建扩展在过去的更换标准的Maven组件和Maven的开发被告知,这是不可能的。

你可以查找默认BeanConfigurator和使用反射来获取其ConverterLookup converterLookup场,然后调用registerConverter与您的自定义转换器,但是这将是脆弱的。

也许最好是干脆放弃,声明你的Mojo参数是类型的String ,并执行转换明确地execute



Answer 2:

对于较新的Maven(与Maven 3.3.1测试)现在可以子类BasicComponentConfigurator访问DefaultConverterLookup作为成员变量:

@Component(role = ComponentConfigurator.class, hint = "basic")
public class ExtendedComponentRegistrator 
        extends BasicComponentConfigurator  
        implements Initializable {

    @Override
    public void initialize() throws InitializationException {
        converterLookup.registerConverter(new MyCustomConverter());
    }
}

然后在pom.xml使神经元数据的产生:

<plugin>
  <groupId>org.codehaus.plexus</groupId>
  <artifactId>plexus-component-metadata</artifactId>
  <executions>
    <execution>
      <goals>
        <goal>generate-metadata</goal>
      </goals>
    </execution>
  </executions>
</plugin>


文章来源: Custom type converter for Mojo configuration?