Как переименовать цели в Знатоке?

В документе Знатока Введение в Жизненный цикл Сборки, цель display:time описан это производит текущее время. Плагин следующие:

...

  com.mycompany.example
  maven-touch-plugin
  1.0
  
    
      process-test-resources
      
        timestamp
      
    
  

...

У меня есть несколько вопросов, касающихся этого плагина:

  1. Как я могу изменить имя цели к, например, foo:bar? (Почему не делает ни одного display ни time появиться где-нибудь во фрагменте XML? Как можно сказать от рассмотрения фрагмента, какие цели это определяет?)

  2. Как я могу вручную выполнить эту цель? (Для подобных конструкций, эквивалента mvn display:time иногда работы, но это последовательно не работает.)

  3. Как я могу видеть, существует ли эта цель? (т.е. перечислите доступные цели; этот вопрос предполагает, что это невозможно.)

9
задан Bhargav Rao 5 September 2018 в 01:09
поделиться

3 ответа

Как я могу изменить название цели, например, на 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 ).

11
ответ дан 4 December 2019 в 15:13
поделиться

Для вашего первого. Название цели определяет плагин (для этого есть аннотация). Если у вас есть исходный код, вы его измените. Взглянув на XML, вы не сможете понять, какие цели плагин определяет только те, которые указаны в XML. Лучше всего посмотреть документацию плагина. Второй: вам нужно проверить документацию. Обычно pluginname: goal ... Может быть, вам нужно указать полный путь к плагину (groupId). К третьему: обычно у вас должна быть возможность использовать плагин справки, посмотрите docs .

0
ответ дан 4 December 2019 в 15:13
поделиться

Я думаю, что есть вероятность, что в документации есть опечатка. Цели плагина задаются plugin-name:goal-name. Этот XML привязывает цель touch:timestamp к фазе process-test-resources. Этот фрагмент не имеет никакого отношения к display:time.

  1. Насколько я знаю, переименовать цели maven невозможно. (Кажется, что это только запутает ситуацию.) Исходный код плагина определяет цели, а не pom. Тег в pom просто позволяет вам привязывать цели плагина к фазам, или перепривязывать цели, если у них уже есть фаза по умолчанию.

  2. Вы должны быть в состоянии запустить цель с prefix:goalName. Чаще всего префикс - это просто то, что находится между "maven-" и "-plugin" в artifactId. Например, touch:timestamp. В некоторых ситуациях это усложняется, поскольку авторы плагинов могут указать "goalPrefix", отличный от имени плагина, но я никогда не сталкивался с подобными проблемами.

  3. Лучший способ узнать, какие цели определяет плагин, и к каким фазам они привязаны по умолчанию - это прочитать документацию плагина.

2
ответ дан 4 December 2019 в 15:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: