Ответ 1
Использование свойств - это, безусловно, один из способов, но не идеальный. Он по-прежнему требует, чтобы пользователь определял ${propertyName} в нескольких местах по всему pom. Я хочу, чтобы мой плагин работал без каких-либо изменений для пользователя pom, кроме самого определения плагина.
Я не вижу доступа к свойствам времени выполнения другого MOJO как слишком жесткой связи. Если другое MOJO определено где угодно в иерархии сборки, я хочу, чтобы мое MOJO соблюдало ту же конфигурацию.
Мое текущее решение:
private Plugin lookupPlugin(String key) {
List plugins = getProject().getBuildPlugins();
for (Iterator iterator = plugins.iterator(); iterator.hasNext();) {
Plugin plugin = (Plugin) iterator.next();
if(key.equalsIgnoreCase(plugin.getKey())) {
return plugin;
}
}
return null;
}
/**
* Extracts nested values from the given config object into a List.
*
* @param childname the name of the first subelement that contains the list
* @param config the actual config object
*/
private List extractNestedStrings(String childname, Xpp3Dom config) {
final Xpp3Dom subelement = config.getChild(childname);
if (subelement != null) {
List result = new LinkedList();
final Xpp3Dom[] children = subelement.getChildren();
for (int i = 0; i < children.length; i++) {
final Xpp3Dom child = children[i];
result.add(child.getValue());
}
getLog().info("Extracted strings: " + result);
return result;
}
return null;
}
Это работало для нескольких небольших сборников, с которыми я тестировал. Включая многомодульную сборку.