Плагин развертывания Maven - deployAtEnd не работает

Я использую плагин maven-deploy-plugin в многомодульном проекте со свойством deployAtEnd, установленным на true.

После выполнения mvn deploy в корневом проекте для каждого подпроекта выполняется развертывание плагина - я вижу что-то вроде: [INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ subproject-name --- [INFO] Deploying package:subproject-name:v1.1 at end Последний вызов для корневого проекта: [INFO] --- maven-deploy-plugin:2.8.2:deploy (default-deploy) @ parent-project --- [INFO] Deploying package:parent-project:v1.1 at end и все, фактическое развертывание не выполняется.

Как заставить плагин деплоя работать корректно в многомодульном проекте с deployAtEnd=true?


person Arkadiusz Komarzewski    schedule 31.03.2016    source источник
comment
И в конце всех модулей вы не видите вывод о развертывании артефактов в репозиторий? Используете ли вы пользовательские плагины maven, которые определяют свой собственный жизненный цикл?   -  person khmarbaise    schedule 31.03.2016
comment
@khmarbaise Правильно, нет вывода, связанного с развертыванием. Я не использую никаких пользовательских плагинов (по крайней мере, я так думаю, как я могу это проверить?)   -  person Arkadiusz Komarzewski    schedule 31.03.2016
comment
Можете ли вы показать полный вывод журнала, иначе трудно понять, что не так?   -  person khmarbaise    schedule 31.03.2016
comment
@khmarbaise Я готовлю минимальный пример. Между тем, я заметил, что если я ставлю явное выполнение в определении плагина: <executions> <execution> <id>deploy</id> <phase>deploy</phase> <goals> <goal>deploy</goal> </goals> </execution> </executions>, то начинается развертывание, но в каком-то подпроекте в середине последовательности.   -  person Arkadiusz Komarzewski    schedule 01.04.2016
comment
Чтобы было ясно, я использую deployAtEnd в течение длительного времени с большими проектами около 500 модулей, которые работают без каких-либо проблем ..... Так что я предполагаю, что есть какая-то другая проблема ... на которую я могу взглянуть, только если вы предложите соответствующие лог-файлы...   -  person khmarbaise    schedule 01.04.2016


Ответы (2)


Поскольку мы только что столкнулись с этой проблемой сегодня, я обнаружил связанную с ней проблему в maven-deploy-plugin:

https://issues.apache.org/jira/plugins/servlet/mobile#issue/MDEPLOY-193

Эксплантация Жерома Жосле в этом выпуске:

Я выдаю эту проблему сегодня и нашел обходной путь.

Плагин maven-deploy-plugin записывает свое состояние в статические переменные. Один для стека запросов на развертывание (deployRequests), а другой для подсчета готовых проектов (readyProjectsCounter). Когда возникает проблема, для подсчета готовых проектов используется более одной статической переменной. Это происходит, когда существует более одного загрузчика классов, который загружает классы подключаемого модуля развертывания. Это приводит к множеству экземпляров класса и множеству экземпляров статической переменной. Некоторые модули рассчитываются на один экземпляр, а другие модули на другой.

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

Как указано в следующей документации: https://svn.apache.org/repos/infra/websites/production/maven/content/reference/maven-classloading.html :

Для проектов, использующих расширения сборки, подключаемые загрузчики классов подключаются к загрузчикам классов проекта. Это дает коду подключаемого модуля доступ как к пакетам Maven API, так и к пакетам, экспортируемым расширениями сборки проекта. Maven создаст один и только один загрузчик классов для каждой уникальной комбинации плагин+зависимости+сборка-расширения.

и

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

Обходной путь — объявить все подключаемые модули расширения со всеми их дополнительными <dependencies> в родительском проекте. Это гарантирует, что один и тот же загрузчик классов используется для загрузки плагина во всех модулях.

person Sablier    schedule 27.11.2017

Сегодня я решил ту же проблему в моем проекте.

Проблемные модули имеют расширения (теги <extension>). Они нарушают счетчик встроенных модулей в maven-deploy-plugin.

Чтобы это исправить, я переместил <extension> в корневой POM.

person Aleks Ya    schedule 19.05.2016