Передача специальных символов ключу карты 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!>java.util.Date</DateTime!>
<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>