2010-02-03 9 views
12

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

Однако, не the Maven2 documentation указывает, что для агрегации проекта необходим тип упаковки 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?

ответ

10

Как указано в Inheritance разделе POM Reference:

The packaging type required to be pom for parent and aggregation (multi-module) projects.

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

0

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

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

Для получения более подробной информации см. Maven Book Section 3.6.1.

2

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^