Написание 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
...).
В основном, выберите этап после того, который вам нужен (или даже тот же), и он должен работать.