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

Императивные против декларативных систем сборки

Недавно я начал использовать Gradle в качестве системы сборки. Они сначала сравнивают, что Gradle делает с подобными Ant, а Maven - это то, Ant - это система обязательная, тогда как Maven - это система декларативная. Пока Gradle является декларативной системой сборки без жесткости, выполняемой Maven.

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

4b9b3361

Ответ 1

Короче говоря, ant script сообщает ant, что делать - "скомпилировать эти файлы, а затем скопировать их в эту папку. Затем возьмите содержимое этой папки и создать архив."

В то время как maven pom объявляет то, что мы хотели бы иметь в результате - "вот имена библиотек, от которых зависит проект, и мы хотели бы создать веб-архив", Maven знает, как получить библиотеки и найти исходные классы.

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

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

EDIT: Важным аспектом сравнения ant -maven является то, что maven имеет соглашение , описывающее, где файлы должны лежать, где найдены зависимости, где поставить полученный артефакт, а ant - нет.

Итак, вы можете подумать о том, чтобы использовать maven как поездку на автобусе - вы выбираете остановку, где вы входите, и ту, где вы уходите. Использование ant похоже на вождение автомобиля - вы должны сделать это сами. Вам не нужно рассказывать водителю автобуса, что делать, но остановки могут быть слишком далеко от того места, куда вы хотите отправиться.

EDIT2: "Метаморфология" Переосмысление колеса "кажется менее ясной, чем я надеялся. Вот что я имею в виду:

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

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

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