Что делает Maven, в теории и на практике? Когда стоит его использовать? [закрыто]


156

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

Можете ли вы дать мне несколько практических советов? Maven очень помогает? Что на самом деле делает Maven для моего проекта?


Эй, взгляни на этот мой вопрос о Maven, Spring и Roo. Я много использовал Maven при работе с Eclipse и для ускорения разработки. Но есть некоторые проблемы. Я думаю, что вы должны понимать систему аннотаций Java вместе с Maven. Но взгляните на вопрос, который я связал ..
mm24

@ArtB дает хорошее объяснение того, что такое Maven. Однако, как я сказал в своем комментарии к его ответу, я не думаю, что вы должны его использовать. Если вам нужен инструмент для сборки, используйте Gradle. Скачайте его, установите его, затем в своем проекте создайте файл с именем, build.gradleкоторый будет содержать только одну строку с надписью apply plugin: 'java'. Предполагая, что ваш исходный код находится в обычном месте (в src/main/javaмодульном тестировании src/test/java), вы можете теперь собрать, протестировать и упаковать свой код, сказав gradle build. Легко!
Том Андерсон

2
Для использования Gradle вам нужно научиться Groovy , и вы , безусловно , будете попадались проект с использованием Maven , так что по - прежнему стоит обучения. Кроме того, понимание Maven облегчит понимание других инструментов, которые появились после него.
Сани

Что общего у Maven с аннотациями Java?
Сани

1
+1 для Gradle, он не только находится ближе к дому для разработчиков Java, он может повторно использовать артефакты maven и может легко создавать нестандартные сборки stackoverflow.com/questions/1163173/…
Kalpesh Soni

Ответы:


183

Что оно делает

Maven является «инструментом управления сборкой», то для определения того, как ваши .javaфайлы компилируются в .class, упакованы в .jar(или .warили .ear) файлы (до / после) , обработанных с помощью инструментов, управления вашим CLASSPATH, а всех остальных родов задач, которые необходимы для построить свой проект Он похож на Apache Ant или Gradle или Makefiles в C / C ++, но он пытается быть полностью автономным в нем , что вам не нужно никаких дополнительных инструментов или сценарии, включив другие общие задачи , такие как загрузки и установки необходимых библиотек и т.д.

Он также разработан вокруг темы «сборка переносимости», поэтому у вас не возникает проблем, связанных с тем, что один и тот же код с одним и тем же сценарием сборки работает на одном компьютере, но не на другом (это известная проблема, у нас есть виртуальные машины Windows 98 машин, так как мы не смогли собрать некоторые наши приложения Delphi где-либо еще). По этой причине это также лучший способ работать над проектом между людьми, которые используют разные IDE, поскольку созданные в IDE Ant-сценарии сложно импортировать в другие IDE, но в настоящее время все IDE понимают и поддерживают Maven ( IntelliJ , Eclipse и NetBeans ). Даже если вам не понравится Maven, он станет отправной точкой для всех других современных инструментов сборки.

Почему вы должны использовать это

В Maven есть три вещи, которые очень хороши.

  1. Maven (после того, как вы объявите, какие из них вы используете) автоматически загрузит все библиотеки, которые вы используете, и библиотеки, которые они используют для вас. Это очень хорошо, и делает смехотворным легко работать со многими библиотеками. Это позволяет избежать «ада зависимости» . Это похоже на плющ Apache Ant's .

  2. Он использует « Соглашение о конфигурации », так что по умолчанию вам не нужно определять задачи, которые вы хотите выполнить. Вам не нужно писать этапы «compile», «test», «package» или «clean», как это нужно делать в Ant или Makefile. Просто поместите файлы в те места, где Maven ожидает их, и это должно сработать.

  3. В Maven также есть множество хороших плагинов, которые вы можете установить и которые будут выполнять многие рутинные задачи, от генерации классов Java из схемы XSD с использованием JAXB до измерения покрытия тестами с помощью Cobertura . Просто добавьте их к себе, pom.xmlи они будут интегрированы со всем, что вы хотите сделать.

Начальная кривая обучения крутая, но (почти) каждый профессиональный Java-разработчик использует Maven или пожелания, которые они сделали. Вы должны использовать Maven в каждом проекте, хотя не удивляйтесь, если вам понадобится некоторое время, чтобы привыкнуть к нему, и что иногда вам хочется просто что-то делать вручную, поскольку изучение чего-то нового иногда причиняет боль. Однако, как только вы по-настоящему привыкнете к Maven, вы обнаружите, что управление сборкой почти не занимает времени.

Как начать

Лучшее место для начала - « Maven за 5 минут ». Это позволит вам начать с проекта, готового для написания кода со всеми необходимыми настройками файлов и папок (да, я рекомендую использовать архетип быстрого запуска, по крайней мере, сначала).

После того, как вы начнете, вам нужно лучше понять, как этот инструмент предназначен для использования. Для этого " Better Builds with Maven " - самое тщательное место для понимания того, как он работает, однако, " Maven: The Complete Reference " более актуален. Прочитайте первый для понимания, но затем используйте второй для справки.


12
Есть множество профессиональных Java-разработчиков, которые не используют Maven и рады, что не используют; некоторые из них просто отвергают его сложность и негибкость и придерживаются Ant или подобного, но все большее число из них - люди, которые перешли к преемникам Maven, таким как Gradle и Buildr. Эти преемники унаследовали от Maven идею предоставления мощного набора шагов сборки из коробки, но также значительно упрощают добавление пользовательских шагов. Учитывая их существование, я, честно говоря, не думаю, что есть какая-либо причина использовать Maven для новых проектов.
Том Андерсон

5
Всегда есть вопрос, сколько деталей нужно добавить в ответ, но если вы среднестатистический Java-разработчик, то в вашем офисе это скорее всего Maven или хреновый Ant-ад (Ant + bash + perl + build computer, сконфигурированный с магическими путями). Если вы один из немногих счастливчиков, работающих с разработчиками A + в хорошей среде со свободой выбора, есть и другие варианты (Gradle - один из них). Но если вы работаете в среднем месте, Maven - лучший инструмент, который не позволяет вашим коллегам порезаться чем-то острым.
Сани

4
Я не думаю, что вы должны быть разработчиком A +, чтобы использовать Gradle. Я не понимаю, почему организация, которая может принять Maven, не может принять Gradle. Это правда, что Gradle позволяет вам выстрелить себе в ногу, точно так же, как это делает Ant, но способом, которым Maven делает довольно сложно (и у меня есть коллекция ножных стоп моих коллег, чтобы доказать это); это компромисс, позволяющий делать вещи, которые Maven делает практически невозможными.
Том Андерсон

4
С точки зрения использования чего-то вроде Gradle и избегания ударов ногами, я предлагаю классификацию программистов по методу сортировки. Некоторые программисты не будут бояться редактировать сценарии сборки и делать вещи более или менее правильно. Эти люди полезны. Некоторые программисты боятся сценариев сборки и не будут их трогать. Эти люди по крайней мере не вредны; Я был в команде из 12 человек, где только двое из нас осмелились потрогать сборку, и на самом деле она работала довольно хорошо. Некоторые программисты не боятся сценариев сборки, но испортят их, если коснутся их. Эти люди опасны.
Том Андерсон

1
так что это как npm для Java
KJW

9

Из документа Sonatype :

Ответ на этот вопрос зависит от вашей собственной перспективы. Подавляющее большинство пользователей Maven назовут Maven «инструментом сборки»: инструментом, используемым для создания развертываемых артефактов из исходного кода. Инженеры-строители и руководители проектов могут ссылаться на Maven как на нечто более всестороннее: инструмент управления проектами. В чем разница? Инструмент сборки, такой как Ant, ориентирован исключительно на предварительную обработку, компиляцию, упаковку, тестирование и распространение. Инструмент управления проектами, такой как Maven, предоставляет расширенный набор функций, которые можно найти в инструменте сборки. Помимо предоставления возможностей для сборки, Maven также может создавать отчеты, создавать веб-сайты и облегчать общение между членами рабочей группы.

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

Вкратце, он работает на более высоком концептуальном уровне, чем, скажем, Ant. В Ant вы должны указать набор файлов и ресурсов, которые вы хотите собрать, затем указать, как вы хотите, чтобы они были собраны вместе, и указать порядок, в котором они должны быть (clean / compile / jar). С Maven это все неявно. Maven ожидает найти ваши файлы в определенных местах и ​​будет автоматически работать с этим. Следовательно, настройка проекта с Maven может быть намного проще, но вы должны играть по правилам Maven!


Я не отрицал это, но, возможно, downvoters прочитал вашу цитату из пропаганды Sonatype как неявное одобрение тоталитарной философии Maven "инструмент управления проектами".
Том Андерсон

1
Я не чувствую, что вы ответили на вопрос ОП, вместо этого вы только что опубликовали маркетинговый спил ... и этот спил смешен, поскольку "управление проектами" - это гораздо больше, чем то, что делает Maven, чтобы запутать больше, чем помогает, ПО МОЕМУ МНЕНИЮ.
Сани

2
@ Брайан Извините, если мой предыдущий комментарий звучит плачевно, но позвольте мне перефразировать его: я чувствую, что ваш комментарий хорошо объясняет Maven, если вы уже понимаете, что такое Maven, но в качестве начальной отправной точки это не поможет.
Сани

5

Mavenэто инструмент для сборки Наряду с Antили Gradleявляются Javaинструментами для строительства.
Если вы новичок в Java, просто собирайте, используя свою IDE, поскольку Mavenу вас крутая кривая обучения.


Поддержка IDE для Maven в NetBeans очень хорошая, поэтому кривая обучения практически не существует.
Капитан Жираф
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.