Как получить текущий MavenSession или MavenExecutionRequest из компонента Plexus

Я создал компонент Plexus для размещения общей логики для нескольких Mojos, которые я хочу создать. Мне удалось передать информацию типа localRepository и выполнить проект из Mojo (и тестовых случаев).

Мне было интересно, есть ли способ получить MavenSession или MavenExecutionRequest из компонента, не передавая их в качестве параметров из Mojo. Я знаю, что мой компонент будет работать от Maven Mojo.

Я использую Maven 2 в этом экземпляре.

Ответ 1

Я не верю, что есть и не думаю, что это хорошая идея.

Из моего понимания, то, к чему вы стремитесь достичь, есть общий компонент, который будет использоваться для нескольких моджо. Это требует, чтобы текущий сеанс Maven был передан и использовался для последующего возврата значения.

Способ, которым работает Maven, заключается в том, что он запускает цели из плагинов в почти контейнерной среде. Каждому плагину разрешено действовать в рамках Фаза Maven, как определено <executions />. Это позволяет Maven отделять сложности построения, тестирования, проверки, развертывания и т.д. И т.д. Вызов mvn clean install, если только я не ошибаюсь, - это два отдельных исполнения, один для запуска clean построить жизненный цикл, а затем install.

Поэтому небезопасно предполагать, что MavenSession и последующие MavenExecutionRequest представляют один и тот же экземпляр, используемый в предыдущем вызове. clean - это отдельный вызов, логика которого не должна поддерживаться в новом сеансе.

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

Я надеюсь, что ответ, который вы ищете. Довольно долго, но чтобы понять, почему вам нужно предоставить сеанс, подумайте Maven.