- В моем проекте у меня разные модули.
- Каждый модуль имеет pom.xml, в котором упаковка является банкой.
- И каждый pom относится к общему родителю.
-
В родительском модуле есть также pom.xml, который включает в себя все модули.
Но когда я попытался сделать упаковку в pom.xml родительского модуля, он показывает ошибку "Ошибка упаковки". Проект агрегатора нужен pom как упаковка ".
Я хочу сделать исполняемую банку приложения из maven так, каково решение этой проблемы или есть какое-либо другое решение.
Упаковочная банка недействительна. Проект агрегатора нужен пом в качестве упаковки
Ответ 1
Чтобы сделать вещи короткими: если в проекте родительского агрегатора нет исходного кода (и это хорошая практика), просто добавьте это в свой родительский pom.xml:
<packaging>pom</packaging>
Если родительский проект содержит исходный код, я настоятельно рекомендую вам:
- переместите этот код в новый модуль (позвоните ему
commons
) - make
commons
дочерний модуль вашего родительского проекта - добавить модуль
commons
в качестве зависимости от всех других модулей, требующих его (возможно, всех) - добавить
<packaging>pom</packaging>
в родительский pom.xml
Ответ 2
Maven требует, чтобы родительский элемент был packaging
pom
.
Вы можете создать проект pom
, как если бы это был проект jar
, включив кучу выполнения плагинов и связав их с последующей фазой жизненного цикла. Это не счастливая дорога. Напротив, следующее.
С объектно-ориентированной точки зрения, что вам нужно? У вас есть один объект, состоящий из кучи других объектов, не так ли? Другими словами, состав, в отличие от наследования.
Ваша окончательная поставка составлена из других (jar
) проектов, то есть другие проекты зависят от проекта окончательной доставки. Вы определяете другие проекты как dependency
, чтобы каждый, кто использует вашу окончательную поставку, знал, какие (транзитивные) зависимости получить. В качестве альтернативы окончательная поставка jar
может быть упакована как "uber- jar
" и, следовательно, содержать все ее зависимости. Это действительно зависит от того, как будет использоваться окончательная поставка.
В то же время могут существовать следующие два аспекта (возможно):
- Родительский проект (который отличается от проекта окончательной доставки, на самом деле он также может быть родителем проекта окончательной доставки) определяет общие черты между его последующими дочерними элементами, как и следовало ожидать от наследования. Ребенок - это любой проект, который ссылается на родителя через конфигурацию
parent
в POM. - Проект, который определяет
modules
, который должен быть легко построен за один раз. Модули - это проекты, на которые ссылается использованиеmodules.module
. Обычно это (я думаю, > 99%) выполняется в родительском проекте, но не обязательно. Вы также можете добавить его в окончательный проект доставки (не влияя на наследование, потому что это, таким образом, другой зверь), но он атипичный, и я бы туда не поехал.