Как получить текущий MavenSession или MavenExecutionRequest из компонента Plexus - PullRequest
58 голосов
/ 17 сентября 2010

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

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

В этом случае я использую Maven 2.

1 Ответ

1 голос
/ 13 августа 2012

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

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

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

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

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

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

...