И еще один, который предполагает, что символы в конце заключены в <...>
, но не всегда может быть
=SUBSTITUTE(REPLACE(A1,1,FIND("(",A1),""),")","")
Обратите внимание, что эта же формула также будет работать над вашим исходным сообщением, прежде чем она будет отредактирована, и
добавлено в конце каждой строки:
Используя свойства, конечно, один способ пойти, однако не идеальный. Это все еще требует, чтобы пользователь определил $ {propertyName} в нескольких местах всюду по англичанину. Я хочу позволить моему плагину работать без модификаций англичанину пользователя кроме самого сменного определения.
я не вижу доступ к свойствам времени выполнения другого 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;
}
Это работало на несколько маленьких сборок, с которыми я протестировал. Включая сборку мультимодуля.
Я не уверен, как Вы сделали бы это точно, но мне кажется, что это не могло бы быть лучшим проектным решением. Если вообще возможный необходимо стремиться разъединять Mojo от каких-либо других плагинов там.
Вместо этого я рекомендовал бы использовать пользовательские свойства для факторизации любого дублирования в конфигурации отдельных плагинов.
можно установить пользовательское свойство "нечто" в англичанине при помощи раздела свойств:
<project>
...
<properties>
<foo>value</foo>
</properties>
...
</project>
нечто свойства теперь доступно где угодно в англичанине при помощи знака доллара + изогнутая нотация фигурной скобки:
<somePluginProperty>${foo}</somePluginProperty>
Вы можете получить список подключаемых модулей, которые в настоящее время используются в сборке, используя следующие шаги:
Сначала вам нужно заставить Maven внедрить текущий проект в ваш mojo, вы используете класс переменная, определенная ниже, чтобы получить это.
/**
* The maven project.
*
* @parameter expression="${project}"
* @readonly
*/
private MavenProject project;
Затем вы можете использовать следующее, чтобы получить список подключаемых модулей, используемых в этой сборке.
mavenProject.getBuildPlugins()
Вы можете повторять этот список, пока не найдете подключаемый модуль, из которого вы хотите извлечь конфигурацию.
Наконец, вы можете получить конфигурацию как Xpp3Dom.
plugin.getConfiguration()
Примечание: Если вы измените конфигурацию других плагинов (а не просто извлекаете информацию), она останется измененной только для текущей фазы, а не для последующих фаз.