Maven managed dependencies - resolving ${project.version} from parent pom

MavenMaven 3Build Dependencies

Maven Problem Overview


How is placeholder ${project.version} resolved for managed properties from parent pom? I've expected that it is resolved globally, so when the parent pom has version 2, ${project.version} would also be resolved to version 2.

In parent pom I have:

<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 child I use

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

But the artifact my.group.dep.1.jar is used, instead of my.group.dep.2.jar. So the placeholder is resolved to the version of the project using the managed dependency, and not those of the project defining the dependency.

Is that expected behaviour? I'm using maven 3.0.4.

Maven Solutions


Solution 1 - Maven

You have to skip <version> tag in child, but keep the <parent><version> ... </parent> tag.

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

> One factor to note is that these variables are processed after > inheritance as outlined above. This means that if a parent project > uses a variable, then its definition in the child, not the parent, > will be the one eventually used.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDanubian SailorView Question on Stackoverflow
Solution 1 - MavenTeraforView Answer on Stackoverflow