Передача специальных символов ключу карты Maven Mojo

В моем плагине Maven MOJO есть следующее свойство:

@Mojo(name = "generate", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true)
public class GraphQLCodegenMojo extends AbstractMojo {
    @Parameter
    private Map<String, String> customTypesMapping;
}

Который я обычно устанавливаю следующим образом (на основе руководства Maven):

<customTypesMapping>
     <DateTime>java.util.Date</DateTime>
</customTypesMapping>

Теперь я хочу разрешить пользователям плагина использовать специальные символы в качестве ключа карты.

Я пробовал разные подходы, но ни один из них не работает:

<customTypesMapping>
    <DateTime!>java.util.Date</DateTime!>
    <DateTime&#33;>java.util.Date</DateTime&#33;>
    <customTypeMapping>
        <name>DateTime</key>
        <value>java.util.Date</value>
    </customTypeMapping>
</customTypeMapping>

Есть ли способ с обратной совместимостью изменить мой плагин maven (не нарушая работу существующих клиентов)?

1 ответ

Решение - использовать java.util.Properties:

@Mojo(name = "generate", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true)
public class GraphQLCodegenMojo extends AbstractMojo {
    @Parameter
    private Properties customTypesMapping = new Properties();

Таким образом, его можно указать в xml двумя способами:

<customTypesMapping>
    <property>
        <!--note the special character below-->
        <name>Date!</name>
        <value>java.util.Date</value>
    </property>
</customTypesMapping>

и обратно совместимым способом, чтобы существующим пользователям плагина не нужно было изменять свою конфигурацию:

<customTypesMapping>
    <DateTime>java.util.Date</DateTime>
</customTypesMapping>
Другие вопросы по тегам