2013-09-11 2 views
19
  • В моем проекте у меня есть разные модули.
  • В каждом модуле есть pom.xml, в котором упаковка представляет собой банку.
  • И каждый pom относится к общему родителю.
  • В родительском модуле есть также pom.xml, который включает в себя все модули.Упаковочная банка недействительна. Проект агрегатора нужен пом в виде упаковки

    Но когда я попытался сделать упаковку в pom.xml родительского модуля, он показывает ошибку, которая является «Упаковочная банка недействительна. Проект агрегатора нужен пом в качестве упаковки».

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

ответ

11

Maven требует родителю быть packagingpom.

Вы можете сделать проект pom так, как если бы это был проект jar, включив в себя кучу плагинов и привязывая их к их следующей фазе жизненного цикла. Это не счастливая дорога. Наоборот, следующие :.

С точки зрения объектно-ориентированного подхода, что вам нужно? У вас есть один объект, состоящий из кучи других объектов, не так ли? Другими словами состав, в отличие от наследования.

Ваша окончательная поставка составлена ​​из других (jar) проектов, то есть другие проекты являются зависимыми от проекта окончательной доставки. Вы определяете остальные проекты как dependency, чтобы кто-то из ваших конечных поставок знал, какие (переходные) зависимости получить. В качестве альтернативы окончательная поставка jar может быть упакована как "uber-jar" и таким образом содержать все ее зависимости. Все зависит от того, как будет использоваться окончательная поставка.

В то же время следующие два аспекта (может) все еще существует:

  • родительского проект (который отличается от окончательного проекта поставки, на самом деле это может быть родителем окончательного проекта поставки также) определяет общие черты между его последующими детьми, как и следовало ожидать от наследования. Ребенок - это любой проект, который ссылается на родителя через конфигурацию parent в POM.
  • Проект, который определяет modules, которые должны быть легко построены за один раз. Модули - это проекты, которые передаются с использованием modules.module. Обычно это (я думаю,> 99%) выполняется в родительском проекте, но не обязательно. Вы также можете добавить его в окончательный проект доставки (не затрагивая наследование, потому что это, таким образом, другой зверь), но это нетипично, и я бы туда не поехал.
26

Чтобы сделать вещи короткими: если проект родительского агрегатора не содержит исходный код (и это хорошая практика), просто добавьте это в родительский pom.XML:

<packaging>pom</packaging> 

Если родительский проект содержит исходный код, я настоятельно рекомендую вам:

  • перенести этот код в новый модуль (назовем его commons)
  • сделать commons ребенка модуль вашего родительского проекта
  • добавить модуль commons в качестве зависимости от всех других модулей, требующих его (возможно, все из них)
  • добавить <packaging>pom</packaging> в родительском pom.xml
Смежные вопросы