2013-06-03 11 views
31

Come viene risolto il segnaposto ${project.version} per le proprietà gestite dal padre pom? Ho aspettato che si è risolto a livello globale, in modo che quando il pom genitore ha la versione 2, ${project.version} sarebbe anche risolto alla versione 2.

In pom genitore ho:

<groupId>my.group</groupId> 
<artifactId>parent</artifactId> 
<version>2</version> 
<packaging>pom</packaging> 

<dependencyManagement> 
    <dependencies> 
     <dependency> 
      <groupId>my.group</groupId> 
      <artifactId>dep</artifactId> 
      <version>${project.version}</version> 
     </dependency> 
    </dependencies> 
</dependencyManagement>  

Nel bambino io uso

<parent> 
    <groupId>my.group</groupId> 
    <artifactId>parent</artifactId> 
    <version>2</version> 
</parent> 
<version>1</version> 
<artifactId>child</artifactId> 

Tuttavia, viene utilizzato l'artefatto my.group.dep.1.jar, anziché my.group.dep.2.jar. Pertanto, il segnaposto viene risolto nella versione del progetto utilizzando la dipendenza gestita,, e non in quella del progetto che definisce la dipendenza da.

È il comportamento previsto? Sto usando maven 3.0.4.

risposta

27

È necessario saltare il tag <version> in child, ma mantenere il tag <parent><version> ... </parent>.

http://maven.apache.org/guides/introduction/introduction-to-the-pom.html#Project_Inheritance

Un fattore da notare è che queste variabili sono trattati dopo successione come descritto sopra. Ciò significa che se un progetto padre utilizza una variabile, allora la sua definizione nel figlio, non il genitore, sarà quella che verrà utilizzata alla fine del .