2010-08-30 37 views
9

Faccio uso di POM di dipendenza che poi andrò a includere in un altro progetto come dipendenza. Il problema che sto avendo è mentre aggrega il POM con quelle dipendenze, appare quando dichiaro dipendenze di scope, a condizione che quelle non siano incluse.Maven - Ereditarietà delle dipendenze - Fornito

È possibile includere dipendenze fornite in POM di dipendenza con un ambito fornito? Spesso dichiaro di quali API ho bisogno e quindi includo l'implementazione come dipendenza di runtime.

risposta

20

Se viene fornita una dipendenza, perché non è possibile ereditare tale dipendenza con lo stesso ambito, quindi non è necessario dichiararla?

Si è ereditato con la stessa portata. Dato il seguente genitore 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> 

E il seguente pom.xml che eredita dalla manufatto radice:

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

Esecuzione mvn dependency:tree dal bambino ha pronunciato la seguente uscita:

 
$ 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 condizione servlet-api è lì, come previsto.

Forse stai utilizzando (errato) la sezione dependencyManagement?

+0

Non dichiaro i miei moduli bambino. Non lo faccio in quel modo perché vorrei conoscere solo i bambini interni e non i progetti esterni. –

+3

@Walter Questo non è importante (il mio padre gen è un pom aggregante perché ho usato archetipi per configurare questo progetto), la parte importante è l'elemento ''. È possibile utilizzare l'ereditarietà senza aggregazione e ciò non modifica la mia risposta. Ma lo aggiornerò per mostrare solo l'ereditarietà ed evitare qualsiasi confusione. –

Problemi correlati