У Maven есть общее правило, что для каждого проекта должен быть только один артефакт. Другими словами, опция № 1 не позволит вам создавать server.war, client.jar и т. Д., Не сражаясь с maven. Это будет большой беспорядок, и вы не сможете воспользоваться плагинами maven. Нет, действительно, ты этого не хочешь. Так просто пойти на вариант № 2, со структурой типа (опуская каталог src
):
.
|-- core
| `-- pom.xml
|-- server
| `-- pom.xml
|-- client
| `-- pom.xml
`-- pom.xml
Относительно Ваше беспокойство по поводу прыжков с POM к POM, ну просто импортировать все модули в вашей IDE, и вы не будете действительно заметьте это. Это очень хорошо работает для многих людей.
UPDATE (для покрытия вопросов из ОП в комментариях):
Борьба с Maven не звучит весело.
Нет, и вы потеряете :)
Что находится в pom.xml на корневом уровне?
Это родительский ПОМ, используемый для Project Aggregation.Цитируя Introduction to the POM документ:
Aggregation Проект похож на наследования проекта. Но вместо , указав родительский POM из модуля , он определяет модули из родительского ПОМ. Таким образом, родительский проект теперь знает свои модули, , и если команда Maven вызывается против родительского проекта, то команда Maven будет затем исполнена в родительских модулях . Для проекта Aggregation, вы должны сделать следующее:
- Изменения родителя РОМ упаковкой к значению «П».
- Укажите в родительском ПОМ каталоги своих модулей (дети РОМ)
агрегация проекта и наследование проекта часто используются вместе. Для получения более подробной информации обратитесь к указанному документу.
«Единый артефакт для каждого проекта» означает, что должен быть отдельный POM для Standalone.jar, Server.war и Client.jar (три общих POM)?
Да, это то, что я имею в виду, один проект генерирует один артефакт (есть некоторые исключения, но это верно 99% времени). Это лучшая практика, которую вы должны (должны?) Следовать.
Что делать, если я также хочу использовать Server.jar, простой сервер на основе гризли? Разве сервер не нуждался бы в двух POM?
Я думаю, что Maven способ справиться с этим было бы использовать assemblies и нет однозначного ответа на ваш вопрос (это может быть один из исключений из правила, упомянутого выше). Но это не помешает вам начать.
Кроме того, как можно начать сборку, которая приведет к созданию всех трех артефактов?
Запустите команду maven из агрегирующего проекта, как мы видели (он же «сборка нескольких модулей»).
Хорошо сказано. Борьба с Maven не звучит весело. Что находится в pom.xml на корневом уровне? «Единый артефакт для каждого проекта» означает, что должен быть отдельный POM для Standalone.jar, Server.war и Client.jar (три общих POM)? Что делать, если я также хочу Server.jar, простой сервер, основанный на Grizzly? Разве сервер не нуждался бы в двух POM? В очередной раз благодарим за помощь. – User1
Кроме того, как можно начать сборку, которая приведет к созданию всех трех артефактов? – User1
Как увеличить свой ответ дважды? :) – User1