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