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