Ответ 1
Как описано в разделе Inheritance POM Reference:
Тип упаковки должен быть
pom
для родительских и агрегационных (многомодульных) проектов.
Итак, поведение Maven кажется мне правильным (и сообщение об ошибке хорошо объясняет).
Я хочу наследовать зависимости (родителя) 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?
Как описано в разделе Inheritance POM Reference:
Тип упаковки должен быть
pom
для родительских и агрегационных (многомодульных) проектов.
Итак, поведение Maven кажется мне правильным (и сообщение об ошибке хорошо объясняет).
Если вы просто хотите наследовать зависимости, я не думаю, что это должен быть тип "pom". У вас может быть это jar и просто указать его как зависимость от проекта, который у вас есть как дочерний. Однако у вас тогда не было бы отношения родительский/дочерний, что предотвращает ваш родительский проект как тип, отличный от "pom".
Чтобы быть ясным, вы наследуете зависимости всех ваших зависимостей (транзитивные зависимости).
Как отмечено Паскалем, поведение правильное.
Если вы все еще ищете средства для обмена зависимостями между модулями, вы можете рассмотреть вопрос об объединении рассматриваемых зависимостей в pom, а затем наличие ваших модулей зависит от этих новых "зависимостей" pom.
Подробнее см. Раздел Maven Book 3.6.1.