В документе Знатока Введение в Жизненный цикл Сборки, цель display:time
описан это производит текущее время. Плагин следующие:
...
com.mycompany.example
maven-touch-plugin
1.0
process-test-resources
timestamp
...
У меня есть несколько вопросов, касающихся этого плагина:
Как я могу изменить имя цели к, например, foo:bar
? (Почему не делает ни одного display
ни time
появиться где-нибудь во фрагменте XML? Как можно сказать от рассмотрения фрагмента, какие цели это определяет?)
Как я могу вручную выполнить эту цель? (Для подобных конструкций, эквивалента mvn display:time
иногда работы, но это последовательно не работает.)
Как я могу видеть, существует ли эта цель? (т.е. перечислите доступные цели; этот вопрос предполагает, что это невозможно.)
Как я могу изменить название цели, например, на
foo: bar
? (Почему нине отображает
, нивремя
нигде не отображается во фрагменте XML? Как вы можете определить, глядя на фрагмент, какие цели он определяет?)
Чтобы быть точным, в foo: bar
, foo
- это «префикс цели плагина», а bar
- «цель». И хотя последнее является производным от соглашений об именах (или может быть настроено 1 ), первое происходит из аннотации BarMojo
, класса, реализующего логику плагина. Примерно так:
/**
* Do the wonderful bar.
* @goal bar
* @requiresProject false
*/
public class BarMojo extends AbstractMojo
{
...
}
Для изменения цели необходимо изменить аннотацию mojo плагина и перестроить его.
Что касается документации, на которую вы ссылаетесь, существует явное несоответствие между целевым временем
и фрагментом XML, который связывает цель timestamp
с process-test-resources
фаза. Это должно быть опечатка.
Как я могу вручную запустить эту цель? (Для подобных конструкций иногда работает эквивалент mvn display: time, но это работает не всегда.)
Вы можете назвать это так:
mvn com.mycompany.example:maven-touch-plugin:1.0:timestamp
Вы можете сократить эту команду, добавив com. mycompany.example
в Группы подключаемых модулей в вашем settings.xml
( org.apache.maven.plugins
и org.codehaus.mojo
объявлены по умолчанию на случай, если вам интересно, как это работает для этих подключаемых модулей)
<settings>
...
<pluginGroups>
<pluginGroup>com.mycompany.example</pluginGroup>
</pluginGroups>
</settings>
Затем, поскольку имя подключаемого модуля совпадает с $ {prefix} -maven-plugin
или maven- $ {prefix} -plugin
шаблоны, вы можете выполнить:
mvn touch:timestamp
Рекомендуется следовать соглашению, но, как я уже сказал, префикс также может быть настроен .
Как я могу узнать, существует ли эта цель?
Проверьте документацию плагина (полученную из источников плагина) или исходники плагина.
1 Обратите внимание на опечатку внизу упомянутой страницы Maven Book. Способ выполнения плагина с настраиваемым префиксом должен быть mvn blah: echo
(см. MVNREF-145 ).
Для вашего первого. Название цели определяет плагин (для этого есть аннотация). Если у вас есть исходный код, вы его измените. Взглянув на XML, вы не сможете понять, какие цели плагин определяет только те, которые указаны в XML. Лучше всего посмотреть документацию плагина. Второй: вам нужно проверить документацию. Обычно pluginname: goal ... Может быть, вам нужно указать полный путь к плагину (groupId). К третьему: обычно у вас должна быть возможность использовать плагин справки, посмотрите docs .
Я думаю, что есть вероятность, что в документации есть опечатка. Цели плагина задаются plugin-name:goal-name
. Этот XML привязывает цель touch:timestamp
к фазе process-test-resources
. Этот фрагмент не имеет никакого отношения к display:time
.
Насколько я знаю, переименовать цели maven невозможно. (Кажется, что это только запутает ситуацию.) Исходный код плагина определяет цели, а не pom. Тег
Вы должны быть в состоянии запустить цель с prefix:goalName
. Чаще всего префикс - это просто то, что находится между "maven-" и "-plugin" в artifactId. Например, touch:timestamp
. В некоторых ситуациях это усложняется, поскольку авторы плагинов могут указать "goalPrefix", отличный от имени плагина, но я никогда не сталкивался с подобными проблемами.
Лучший способ узнать, какие цели определяет плагин, и к каким фазам они привязаны по умолчанию - это прочитать документацию плагина.