2013-06-03 9 views
31

Wie wird Platzhalter ${project.version} für verwaltete Eigenschaften von Parent Pom aufgelöst? Ich erwartete habe, dass es global gelöst ist, so dass, wenn die Mutter pom 2-Version hat, würde ${project.version} auch 2.

In Mutter pom auf Version behoben werden ich habe:

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

In Kind, das ich verwenden

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

Aber das Artefakt my.group.dep.1.jar wird anstelle von my.group.dep.2.jar verwendet. Daher wird der Platzhalter in die Version des Projekts aufgelöst, die die verwaltete Abhängigkeit verwendet, und nicht diejenigen des Projekts , die die Abhängigkeit definieren.

Ist das erwartete Verhalten? Ich benutze Maven 3.0.4.

Antwort

27

Sie müssen <version> Tag in Kind überspringen, aber behalten Sie die <parent><version> ... </parent> Tag.

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

Ein Faktor ist zu beachten, dass diese Variablen nach Vererbung verarbeitet werden, wie oben beschrieben. Wenn also ein übergeordnetes Projekt eine Variable verwendet, wird seine Definition im untergeordneten Element und nicht im übergeordneten Element verwendet.