Подтвердить что ты не робот

Maven: Привязать плагин к выполнению другого плагина, а не к фазе жизненного цикла

Примечание относительно принятого ответа: Я принял ответ из-за сильных косвенных доказательств. Тем не менее, это косвенное доказательство, поэтому возьмите его с солью.


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

Пример: мне нужно release:branch вызвать regex-plugin для генерации ветки с текущей версией в качестве ее имени, минус суффикс -SNAPSHOT. Это то, что у меня есть, что требует от разработчика активации профиля и вызова фазы verify. Мне нужно, чтобы разработчик просто вызывал release:branch, что в свою очередь должно приводить к запуску regex-plugin. В битве с Gitflow.

<profile>
    <id>Release Branch</id>
    <build>
        <plugins>
            <!-- On validate, compute the current version without -SNAPSHOT. -->
            <!-- Put the result in a property. -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <version>1.7</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>regex-property</goal>
                        </goals>
                        <configuration>
                            <value>${project.version}</value>
                            <regex>^(.*)-SNAPSHOT$</regex>
                            <replacement>$1</replacement>
                            <name>project.unqualifiedVersion</name>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- Also on validate, run the branch plugin, and use -->
            <!-- the non-SNAPSHOT version thus computed in the branch name. -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.3.2</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>branch</goal>
                        </goals>
                        <configuration>
                            <branchName>release/${project.unqualifiedVersion}</branchName>
                            <updateWorkingCopyVersions>true</updateWorkingCopyVersions>
                            <updateBranchVersions>false</updateBranchVersions>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>

Цель состоит в том, чтобы release:branch переместить текущую версию моментального снимка (скажем, 1.0.5-SNAPSHOT) в новую ветку, которая должна быть названа в честь версии, но без избыточного суффикса -SNAPSHOT (1.0.5). Текущая ветка должна затем взять новую версию моментального снимка (1.1.0-SNAPSHOT, not 1.0.6-SNAPSHOT, потому что мы хотим, чтобы release 1.0.x имело место для исправлений, поэтому резервируем ее для ветки) (у меня нет автоматической вычисление следующей версии снимка еще не выяснено, поэтому, если вы запустили конфигурацию Maven выше с помощью validate, вам нужно будет ввести ее в командной строке).

4b9b3361

Ответ 1

Нет, вы не можете привязать плагин к другому плагину. Только на фазу.

В Maven-внутренних терминах "Mojo" - это то, что работает. "Плагин" - это коллекция моджо, завернутая, чтобы вы могли ссылаться на них из POM. Mojos связывается только с фазами.

Из документации по разработке плагинов:

Каждый Mojo, указанный внутри дескриптора плагина, должен предоставить следующие

...

phase... Определяет фазу по умолчанию для привязки выполнения mojo, если пользователь явно не задал фазу в POM. Примечание. Эта аннотация не будет автоматически выполнять mojo, когда объявление плагина добавляется в POM. Он просто позволяет пользователю опустить элемент <phase> из окружающего элемента <execution>.

Для дальнейшего подтверждения см. источник MojoExecution (JavaDoc для этого класса не является полезным) и обратите внимание, что есть два возможных источника выполнения, перечисленные:

Выполнение, которое происходит от прямого вызова цели из CLI

и

Выполнение, которое происходит от цели, связанной с фазой жизненного цикла

Никакой другой способ начать выполнение означает, что вам не повезло (за исключением необычных мер, таких как запуск собственного плагина, который сочетает в себе эффекты двух плагинов, которые вы хотите связать, а затем с помощью своего настраиваемого плагина).

Ответ 2

Доказательства, представленные до сих пор, являются довольно косвенными. Я сделал некоторые исследования самостоятельно, поэтому мне лучше поделиться им здесь. Нижеследующие являются либо более похожими "это невозможно", либо строительными блоками для альтернатив.

jetspeed: mvn plugin --- запустить определенную последовательность плагинов; конфигурация для запуска может варьироваться через системное свойство; Проблемы интеграции IDE


fooobar.com/info/39763/... --- тот же вопрос отвечает в контексте пользовательского Mojo


fooobar.com/info/261419/... --- снова, из контекста пользовательского Mojo


Настройка выполнения Mojo по умолчанию --- Страница Maven, описывающая, как работает Mojos - более косвенные доказательства


fooobar.com/info/261420/... --- окольное решение для моей проблемы, к сожалению, ответило отрицательным


ИНТЕРЕСНО: Руководство по разработке Ant плагина --- обращаюсь ко мне, потому что, хотя он требует написания пользовательского плагина, все это Ant + конфигурация Maven, код не компилируется; предположительно, является более низким барьером для входа


Создание параллельного жизненного цикла --- привлекательный подход, потому что я мог полностью контролировать содержимое жизненного цикла до того, где он будет использовать глаголы Gitflow; неясно, как интегрированные среды интегрируют это; кривая обучения и проблемы с препятствиями принятия решений