Я работаю с набором компонентов и приложений на C # и C ++, которые управляются зависимостями через maven. Общее правило «Если это можно сделать через командную строку, это можно сделать в maven», так что в итоге мы получаем много «склеек» .bat, .exe и powershell, чтобы собрать все части вместе.
Самая большая проблема с использованием maven для стека Microsoft - полное отсутствие знакомства с циклом сборки / развертывания / ALM для ЛЮБОГО нового разработчика. Вы можете найти много разработчиков с опытом работы с MSBuild, TFSBuild, ANT и т. Д., Но это редкость, когда можно найти разработчика на C # или C ++, который работал с maven в чистом магазине Microsoft. Следовательно, развертывание maven для управления зависимостями и процесса сборки чрезвычайно сложно, так как вы тратите немало времени на обучение разработчиков (в чем разница между моментальным снимком и выпуском?), Чрезмерной компоновкой продукта и его масштабированием для получения это правильно и т. д.
Я также обнаружил, что нам пришлось обойти maven, чтобы сделать что-то, похожее на непрерывную интеграцию и непрерывную доставку. Около 70% нашего технологического стека - это C # (остальное - C ++), и мы хотим развертывать большую часть этого на серверах контроля качества каждую ночь, используя по умолчанию самый последний и самый лучший код. Чтобы сбалансировать ценность сборок релизов и производительности dev с помощью снимков, мы в итоге создали процесс сборки, в котором каждую ночь мы создаем сборку релизов для каждого компонента, а затем сборку снимков. Это позволило разработчикам не беспокоиться о том, что POM'ы будут сталкиваться с утренними снимками. В целом, это непростая задача, по крайней мере, для тех, кто прибегает к надежной непрерывной интеграции, к созданию и развертыванию всех сред.
Maven имеет большие перспективы для управления зависимостями и изоляции критических изменений (особенно в интерфейсных компонентах, где потребитель и производитель должны договориться). Эти проблемы были решены другими способами (svn externs, сборки развертывания, управление версиями интерфейса и т. Д.). Но относительно приятно скачать любой компонент, запустить «mvn compile» и посмотреть, как компилируется код (при условии базового уровня переносимости сборки). Для меня, однако, издержки и мета-разговоры о правильной сборке (в отличие от сосредоточения на потребительской ценности) сводят к минимуму ценность maven в целом.