2010-08-30 17 views
9

Utilizo los POM de dependencia que luego incluiré en otros proyectos como dependencia. El problema que tengo es que cuando agrega el POM con esas dependencias, aparece cuando declaro las dependencias del alcance, siempre que no estén incluidas.Maven - Herencia de dependencia - Provisto

¿Es posible incluir dependencias proporcionadas en POM de dependencia con un alcance de proporcionado? A menudo declaro qué API necesito y luego incluyo la implementación como una dependencia de tiempo de ejecución.

Respuesta

20

Si se proporciona una dependencia, ¿por qué no se puede heredar esa dependencia con el mismo ámbito, así que no tengo que declararla?

Es es heredado con el mismo valor. Dada la siguiente matriz 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> 

Y la siguiente pom.xml que hereda del artefacto raíz:

<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> 

Correr mvn dependency:tree del niño da el siguiente resultado:

 
$ 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] ------------------------------------------------------------------------ 

La proporcionado servlet-api está allí, como se esperaba.

¿Está utilizando (mal) la sección dependencyManagement?

+0

No declaro mis módulos niño. No lo hago de esa manera porque solo sabría de niños internos y no de proyectos externos. –

+3

@Walter Esto no es importante (mi pom padre es un pom que se agrega porque usé arquetipos para configurar este proyecto), la parte importante es el elemento ''. Puede usar la herencia sin agregación, y esto no cambia mi respuesta. Pero lo actualizaré para mostrar solo la herencia y evitar cualquier confusión. –

Cuestiones relacionadas