Нужен ли тип упаковки pom, если не используется агрегация проектов (многомодульная)?

Я хочу унаследовать зависимости (родительского) pom.xml в дочернем проекте в Maven 2.2.1; т.е. использовать наследование проекта. Похоже, в этом случае необходимо изменить тип упаковки по умолчанию с jar на pom.

Однако в документации Maven2 не указано что тип упаковки pom необходим для агрегации проектов, т.е. многомодульных проектов, которые используют подмодули, но не для наследования проекта?

<project>
 <modelVersion>4.0.0</modelVersion>
 <groupId>example</groupId>
 <artifactId>example-parent</artifactId>
 <version>1</version>

 <dependencies>
   <dependency>
     <groupId>log4j</groupId>
     <artifactId>log4j</artifactId>
     <version>1.2.14</version>
   </dependency>
 </dependencies>
</project>

<project>     
 <parent>
   <groupId>example</groupId>
   <artifactId>example-parent</artifactId>
   <version>1</version>
 </parent>

 <modelVersion>4.0.0</modelVersion>
 <groupId>example</groupId> 
 <artifactId>example-child</artifactId>
</project>

Но если вы вызовете Maven (например, mvn clean) с указанной выше конфигурацией, вы получите сообщение об ошибке:

Project ID: example:example-child

Reason: Parent: example:example-parent:jar:1 
 of project: example:example-child has wrong packaging: jar.
Must be 'pom'. for project example:example-child

С другой стороны, со следующей записью:

<project> 
 ... 
 <packaging>pom</packaging>
 ... 
</project>

в родительском pom.xml Maven может выполняться без ошибок.

Правильно ли такое поведение Maven?


person ToK    schedule 03.02.2010    source источник


Ответы (3)


Как описано в разделе Наследование Справочник по POM:

Тип упаковки должен быть pom для родительского и агрегированного (многомодульного) проектов.

Таким образом, поведение Maven кажется мне правильным (и сообщение об ошибке самоочевидно).

person Pascal Thivent    schedule 03.02.2010

Если вы просто хотите наследовать зависимости, я не думаю, что это должен быть тип «pom». У вас может быть jar и просто указать его как зависимость от проекта, который у вас есть как дочерний. Однако тогда у вас не будет отношений родитель / потомок, что мешает вашему родительскому проекту быть типом, отличным от pom.

Чтобы быть ясным, вы наследуете зависимости всех своих зависимостей (транзитивные зависимости).

person user972696    schedule 30.09.2011

Как заметил Паскаль, поведение правильное.

Если вы все еще ищете средства для обмена зависимостями между модулями, вы можете подумать о том, чтобы объединить соответствующие зависимости в pom, а затем сделать так, чтобы ваши модули зависели от этого нового pom «зависимостей».

См. Maven Book Section 3.6.1 для получения дополнительных сведений.

person Brian Laframboise    schedule 03.02.2010