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

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

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

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

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

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

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

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

1 ответ

Вы могли бы иметь что-то вроде ниже (взято из 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...).

В основном, выберите этап после того, который вам нужен (или даже тот же), и он должен работать.

Другие вопросы по тегам