Написание Maven Plugin / Mojo: как вы заставляете цель форсировать выполнение других целей? - PullRequest
6 голосов
/ 02 июля 2011

Примечание: эта тема о написании пользовательского Mojo, без использования плагина.

Я поддерживаю плагин для тестирования для Maven. К сожалению, вот уже почти год я позволяю этому конкретному неизвестному задерживаться, и мне бы очень хотелось узнать, как с ним справиться, чтобы его пользователи могли иметь более простую конфигурацию.

Допустим, у нас есть две цели в нашем плагине:

  • prepare (фаза: генерация-источники)
  • do (фаза: компилировать)

Я хочу настроить do Mojo так, чтобы требовалось, чтобы prepare был выполнен на более ранней фазе сборки. Однако ничто в документации дескриптора не предполагает, что я могу.

Пользователь, вероятно, не заботится или не понимает смысл цели prepare, поэтому я не хочу заставлять его указывать это в своем POM. Конечно, я мог бы выполнить Mojo напрямую с do, но тогда цель prepare будет выполняться на более поздней стадии, чем предполагалось.

(Я рассмотрел пользовательских жизненных циклов , но из-за этого кажется, что каждый, у кого уже есть цель prepare в их POM, выполнит ее дважды после выполнения do.)

1 Ответ

3 голосов
/ 02 июля 2011

Вы можете получить что-то похожее на приведенное ниже (взято из CompilerMojo):

/**
 * @author <a href="mailto:jason@maven.org">Jason van Zyl </a>
 * @version $Id: CompilerMojo.java 941498 2010-05-05 21:24:11Z krosenvold $
 * @since 2.0
 * @goal compile
 * @phase compile
 * @threadSafe
 * @requiresDependencyResolution compile
 */

При установке этого значения для вашего класса оно будет выполняться во время фазы компиляции (в этом примере).Фаза компиляции требует, чтобы все предыдущие фазы были выполнены первыми (validate, generate-sources, process-sources, generate-resources, process-resources ...).

По сути, выберите фазу после той, которая вам нужна (или даже ту же), и она должна работать.

...