2010-08-30 5 views
9

Я использую POM-зависимости, которые затем перейду и включу в другие проекты как зависимость. Проблема, с которой я сталкиваюсь, заключается в том, что она агрегирует POM с этими зависимостями, она появляется, когда я объявляю зависимости объема, при условии, что они не включены.Maven - Наследование зависимостей - Предоставлено

Можно ли включить предоставленные зависимости в зависимые POM с областью действия? Я часто заявляю, какие API-интерфейсы мне нужны, а затем включаю реализацию как зависимость от времени выполнения.

ответ

20

Если включена зависимость, почему эта зависимость не может быть унаследована с той же областью, поэтому мне не нужно ее объявлять?

Это is унаследовано с тем же объемом. Учитывая следующие родительская pom.xml:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.stackoverflow.Q3597684</groupId> 
    <artifactId>root</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <name>Q3597684 - Root</name> 
    <packaging>pom</packaging> 
    <dependencies> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>servlet-api</artifactId> 
     <version>2.5</version> 
     <scope>provided</scope> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
</project> 

И следующее pom.xml, который наследует от корня артефакта:

<project> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
    <artifactId>root</artifactId> 
    <groupId>com.stackoverflow.Q3597684</groupId> 
    <version>1.0-SNAPSHOT</version> 
    </parent> 
    <artifactId>child</artifactId> 
    <packaging>war</packaging> 
    <name>Q3597684 - Child</name> 
    <dependencies/> 
</project> 

Запуск mvn dependency:tree от ребенка дает следующий вывод:

 
$ mvn dependency:tree[INFO] Scanning for projects... 
[INFO] Searching repository for plugin with prefix: 'dependency'. 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Q3597684 - Child 
[INFO] task-segment: [dependency:tree] 
[INFO] ------------------------------------------------------------------------ 
[INFO] [dependency:tree {execution: default-cli}] 
[INFO] com.stackoverflow.Q3597684:child:war:1.0-SNAPSHOT 
[INFO] +- javax.servlet:servlet-api:jar:2.5:provided 
[INFO] \- junit:junit:jar:3.8.1:test 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 

Предоставленный servlet-api есть, как и ожидалось.

Вы, может быть, ошибаетесь, используя раздел dependencyManagement?

+0

Я не объявляю свои модули ребенок. Я не делаю этого, потому что я знаю только о внутренних детях, а не о внешних проектах. – 2010-08-30 13:21:43

+3

@Walter Это не важно (мой родительский pom является агрегирующим помпом, потому что я использовал архетипы для настройки этого проекта), важной частью является элемент ''. Вы можете использовать наследование без агрегации, и это не меняет мой ответ. Но я обновлю его, чтобы показать наследование только и избежать путаницы. –

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