Создание проектов Java EE с Maven


13

Я разрабатывал веб-приложения на Java EE с Eclipse около года. Мой работодатель не использует Maven, но чем больше я об этом читаю, тем больше я убежден, что Maven + Hudson будет для нас очень полезен. Во-первых, я должен привыкнуть к этим технологиям в свободное время, чтобы я мог создать концептуальное подтверждение.

Прямо сейчас я все еще новичок в Maven. Существует ли набор рекомендаций для создания веб-приложений Java EE с помощью Maven? Например, я мог бы создать проект с базовым архетипом, а затем добавить все необходимые JAR-файлы, поместив зависимости в POM для контейнера сервлета, EJB, EclipseLink и т. Д. Это может работать, но это может быть не лучшим способ сделать это. Я был бы очень признателен за любые рекомендации, которые вы могли бы дать по этой теме.

Ответы:


10

Не связывайтесь с архетипами до позднего времени

Чтобы получить всю информацию о Maven, прочитайте некоторые книги на их веб-сайте . Тем не менее, это немного излишне для того, что вы пытаетесь достичь.

Для начала разложите ваше веб-приложение, следуя стандартной структуре Maven для веб-приложений, как указано ниже. (Для этого вам не нужен архетип Maven, это просто набор стандартных папок, вы можете сделать это за 2 минуты).

  • src/main/java - содержит ваш производственный Java-код
  • src/main/resources - содержит ваши производственные ресурсы classpath (например, контексты Spring)
  • src/main/webapp - (содержит WEB-INF / web.xml, но без папки lib)
  • src/test/java - содержит ваш тестовый код Java
  • src/test/resources - содержит ваши тестовые ресурсы (например, XML-каналы для тестирования веб-сервисов и т. д.)

Основные плагины

Следующим шагом является выбор связки плагинов. Обычные подозреваемые, очевидно, те, которые поддерживают clean, compile и resources (входят в состав Maven, но вы можете настроить их). Тогда у вас будет верный тестер модулей и плагин WAR. Этого достаточно, чтобы создать очень простое веб-приложение.

Более продвинутые плагины

Следующий шаг - представить плагины Findbugs и PMD, которые подробно рассмотрят ваш код и сообщат о возможных проблемах. Возможно, вы захотите использовать JXR для перекрестных ссылок на исходный код, список тегов для отслеживания TODO и теги REFACTOR и так далее. Превыше всего...

... Используйте плагин Jetty для веб-приложений

Используйте плагин Jetty для запуска файла WAR в вашей IDE для простой отладки. Это быстро и мало и делает работу очень быстро. Наличие Jetty в составе вашей сборки Maven позволяет тестировать ваш проект на любом компьютере без IDE с настроенной панелью некоторых сложных серверов. Это также позволяет вам объявлять зависимости от других файлов WAR, что, в свою очередь, означает, что вы можете создать полную рабочую среду, состоящую из нескольких веб-приложений, с помощью одной команды "mvn clean jetty: run". Это работает где угодно, и вы даже можете предоставить тестовую конфигурацию JNDI, чтобы все источники данных Spring-Injected были настроены извне. Если вы объедините этот подход Jetty со стандартной демонстрационной HTML-страницей (src/test/resources/demo.html) вы сэкономите кучу часов разработчика, пытаясь получить работающую локальную среду. Одна команда и все готово. Просто.

Конфигурирование вашей IDE

С Maven это легко, поскольку его поддерживают все большие парни: Eclipse, Netbeans и, конечно, мой любимый Intellij. Просто наведите вашу IDE на pom.xml, и он позаботится о том, чтобы снять все перечисленные зависимости для вас. Нет больше отвода о с WEB-INF/lib. В Eclipse вы обычно используете File | Импорт ... | Maven Project | pom.xml.

Интеграция с Гудзоном

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

Хадсон делает только снимок

Пусть Хадсон выполнит сборку снимков и оставит сборки релизов вручную. Использование такого подхода будет означать, что разработчики могут делиться своим кодом в редакции моментального снимка (например, 1.0.0-SNAPSHOT), и только если он сможет пройти сборку, он будет передан в репозиторий команды. Как правило, Hudson выполняет «mvn clean deploy», хотя включение цели «site» также может быть частью вашего процесса, поскольку для каждой сборки будет создаваться небольшой веб-сайт проекта. Разработчики в команде получат обновленную сборку моментальных снимков, автоматически включенную в их проект посредством процесса управления зависимостями Maven.

Hudson предоставляет множество плагинов, которые могут поддерживать всевозможные метрики. Мой личный фаворит - следить за количеством пройденных тестов за проект с течением времени. Замечательно показать руководству, что количество ваших юнит-тестов и охват постоянно растут.

Общее руководство по настройке

Разделите ваши репозитории по крайней мере на следующую структуру:

  • team-release - все ваши выпущенные производственные артефакты идут сюда
  • team-snapshot - все ваши артефакты разработки снимков находятся здесь
  • Сторонний релиз - все ваши сторонние библиотеки поддержки (например, Spring, Hibernate и т. д.)

Учетные записи разработчиков не должны быть в состоянии записывать в репозитории команды ни снимок, ни выпуск. Это позволило бы разработчику обойти Хадсона, если он спешит и быстро станет нормой.

Убедитесь, что вы всегда скачиваете исходный код, javadocs и подписи SHA для всех ваших третьих лиц. Jarvana - отличный исследователь репозитория для всех тех, кто трудно найти классы.

Подумайте об установке менеджера хранилища, такого как Nexus или Artifactory, чтобы обеспечить лучший контроль над постоянно растущим хранилищем.


2
Сонар также очень хорош и хорошо сочетается с Maven / Hudson
Кевин

1
Абсолютно. Прямо сейчас, если я работаю над проектом Maven в команде, я бы ожидал, что локальный Findbugs / PMD быстро обнаружит проблемы-убийцы, а затем работу Sonar после сборки Jenkins с развертыванием артефактов в Nexus или Artifactory. Это обеспечивает удобное расположение артефактов и анализ воздействия («где используется») для этих артефактов во всей экосистеме проекта. В сочетании с git, JIRA и Fisheye у вас есть отличный процесс разработки.
Гари Роу

1
Гэри, срок действия ссылки в формате pdf истек
user1787812

1

Maven предоставляет множество архетипов

mvn archetype:generate

распечатает список доступных.

Основное различие между простыми архетипами Java и архетипами J2EE заключается в том, что будут созданы каталоги для jsp и изображений. Если вы начинаете новый проект J2EE, рассмотрите возможность использования одного из них с самого начала.

По мере роста вашего проекта вы можете добавлять больше зависимостей. Лично я предпочитаю начать с минимального набора зависимостей (например, базового архетипа J2EE), а затем постепенно добавлять то, что мне нужно.


0

Я сделал это, начав с базового архетипа и добавив все биты, и я совершенно уверен, что это не очень хороший способ. Но я считаю, что это неловко и с другой стороны; выбрать хороший архетип сложно, если вы не «глубоко разбираетесь в секретах». На мой вкус, все это слишком похоже на магические знания (в отличие от разумной обнаруживаемой технической информации)…


И я думаю, что это хороший вопрос. Хотел бы я иметь лучший ответ.
Donal Fellows

Это очень ценится, сэр.
Майкл

0

Maven предоставляет способ создавать проекты из шаблонов, называемых архетипами . Вы используете команду, mvn archetype:generateчтобы выбрать один в интерактивном режиме . Вы также можете указать один напрямую.

mvn archetype:generate \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-j2ee-simple \
    -DarchetypeVersion=1.0

Все на одной линии.


0

Я использую Maven и Hudson последние три месяца. Это помогает мне регулярно проверять работоспособность кодовой базы, выполняя все модульные тесты, генерируя отчет о тестировании. Вы можете попробовать это.
Вы также можете попробовать Spring Roo. Это RAD-инструмент для создания Spring-проекта J2EE.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.