Я хотел бы ответить на несколько жалоб, высказанных на этом форуме:
Maven - это все или ничего. По крайней мере, насколько я мог судить по документации. Вы не можете легко использовать maven как замену ant и постепенно внедрять более продвинутые функции.
Это неправда. Большая победа Maven заключается в использовании его для рационального управления зависимостями, и если вы хотите делать это в maven, а все остальное делать в ant, вы можете. Вот как:
<?xml version="1.0" encoding="UTF-8"?>
<project name="foo" basedir="." xmlns:maven="antlib:org.apache.maven.artifact.ant" >
<maven:dependencies verbose="true" pathId="maven.classpath">
<maven:pom id="maven.pom" file="pom.xml" />
</maven:dependencies>
</project>
Теперь у вас есть объект пути к классам с именем maven.classpath, который содержит все зависимости maven, определенные в файле pom. Все, что вам нужно, это поместить jar-файл maven ant tasks в каталог Ant вашего ant.
Maven делает ваш процесс сборки зависимым от вашего сетевого подключения.
Зависимость по умолчанию и процесс загрузки плагинов зависят от сетевого подключения, да, но только для начальной сборки (или если вы измените зависимости или используемые плагины). После этого все jar-файлы кешируются локально. И если вы хотите принудительно отключить сетевое соединение, вы можете указать maven использовать автономный режим.
Это с самого начала накладывает на вас жесткую структуру.
Неясно, относится ли это к формату файла или проблеме «соглашение или конфигурация». Для последнего существует множество невидимых значений по умолчанию, таких как ожидаемое расположение исходных файлов и ресурсов Java или совместимость источника. Но это не жесткость, это установка разумных значений по умолчанию для вас, чтобы вам не приходилось определять их явно. Все настройки можно довольно легко переопределить (хотя для новичка может быть сложно найти в документации, как изменить определенные вещи).
Если вы говорите о формате файла, ну, это рассматривается в ответе на следующую часть ...
Он основан на XML, поэтому его так же трудно читать, как и ANT.
Во-первых, я не понимаю, как вы можете жаловаться на то, что какой-то аспект чего-то «не лучше, чем муравей» служит оправданием плохой репутации. Во-вторых, хотя это все еще XML, формат XML гораздо более определен. Кроме того, поскольку он так определен, намного проще сделать разумный редактор толстого клиента для POM. Я видел страницы длинных скриптов сборки муравьев, которые прыгают повсюду. Никакой редактор сценариев сборки муравьев не сделает это более приятным, это просто еще один длинный список взаимосвязанных задач, представленных немного по-другому.
Сказав, что есть несколько жалоб, которые я видел здесь, которые имели или имели некоторую силу, самая большая из них
- Документация плохая / отсутствует
- Воспроизводимые сборки
- Интеграция с Eclipse плохая
- Ошибки
На что мой ответ двоякий. Во-первых, Maven - гораздо более молодой инструмент, чем Ant или Make, поэтому вы должны ожидать, что потребуется время, чтобы достичь уровня зрелости этих приложений. Во-вторых, если вам это не нравится, исправьте . Это проект с открытым исходным кодом, и использовать его, а затем жаловаться на то, что каждый может решить, кажется мне довольно глупым. Не нравится документация? Внесите свой вклад, чтобы он стал понятнее, полнее или доступнее для новичков.
Проблема воспроизводимых сборок разбивается на две проблемы: диапазоны версий и автоматические обновления плагинов maven. Что касается обновлений плагинов, ну, если вы не убедитесь, что при пересборке проекта год спустя вы используете тот же самый JDK и ту же версию Ant, ну, это та же проблема с другим именем. Для диапазонов версий я рекомендую работать над плагином, который будет создавать временный pom с заблокированными версиями для всех прямых и транзитивных зависимостей и делать его частью жизненного цикла выпуска maven. Таким образом, ваши релизные сборки всегда будут точным описанием всех зависимостей.