我需要在我的Mojo对象中使用自定义类型,例如LunarDate
:
class MyMojo extends AbstractMojo {
/** @parameter */
LunarDate lunarDate;
}
我想在pom.xml中的<configuration>
部分配置参数。
<configuration>
<lunarDate>丁丑年二月初四</lunarDate>
</configuration>
(类型LunarDate
只是举例说明问题)
我已经有了类型转换器,但是如何启用它们?
答案 0 :(得分:1)
DefaultBeanConfigurator
负责使用DefaultConverterLookup
,并且不使用Plexus容器直接实例化它。
我可以假设在构建扩展中复制和修改它,但通过@Component(role=BeanConfigurator.class)
注册您的副本可能没有效果;我曾尝试从构建扩展中替换标准的Maven组件,并在maven-dev上告知它是不可能的。
您可以查找默认BeanConfigurator
并使用反射获取其ConverterLookup converterLookup
字段,然后使用自定义转换器调用registerConverter
,但这样会很脆弱。
可能最好放弃,将您的Mojo参数声明为String
类型,并在execute
中明确进行转换。
答案 1 :(得分:1)
我能够通过定义ConfigurationConverter(我的目标 类型是AnyLicenseInfo):
@NoArgsConstructor @ToString
public class LicenseConverter extends AbstractBasicConverter {
private static final Class<?> TYPE = AnyLicenseInfo.class;
@Override
public boolean canConvert(Class<?> type) { return type.equals(TYPE); }
@Override
public Object fromString(String string) throws ComponentConfigurationException {
Object object = null;
try {
object =
TYPE.cast(LicenseInfoFactory.parseSPDXLicenseString(string));
} catch (Exception exception) {
String message =
"Unable to convert '" + string + "' to " + TYPE.getName();
throw new ComponentConfigurationException(message, exception);
}
return object;
}
}
使用自定义ComponentConfigurator注册它:
@Named("license-mojo-component-configurator")
@NoArgsConstructor @ToString @Slf4j
public class LicenseMojoComponentConfigurator extends BasicComponentConfigurator {
@PostConstruct
public void init() {
converterLookup.registerConverter(new LicenseConverter());
}
@PreDestroy
public void destroy() { }
}
然后在@Mogo批注中指定配置器:
@Mojo(name = "generate-license-resources",
configurator = "license-mojo-component-configurator",
requiresDependencyResolution = TEST,
defaultPhase = GENERATE_RESOURCES, requiresProject = true)
@NoArgsConstructor @ToString @Slf4j
public class GenerateLicenseResourcesMojo extends AbstractLicenseMojo {
答案 2 :(得分:0)
对于较新的Maven(使用Maven 3.3.1测试),您现在可以将Style
子类化为成员变量<VisualState x:Name="BigView">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="550" />
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="MyButton.Style"
Value="{StaticResource ButtonFormatBlue}" />
</VisualState.Setters>
</VisualState>
:
BasicComponentConfigurator
然后在pom.xml中启用plexus元数据的生成:
DefaultConverterLookup