Issue Details (XML | Word | Printable)

Key: MNG-2653
Type: Bug Bug
Status: Closed Closed
Resolution: Duplicate
Priority: Major Major
Assignee: Kenney Westerhof
Reporter: Michal Stochmialek
Votes: 7
Watchers: 9
Operations

If you were logged in you would be able to see more operations.
Maven 2

using ${version} for subproject dependencies doesn't work (maven uses 2.4.1 version instead)

Created: 29/Dec/05 04:09 AM   Updated: 17/Dec/08 10:06 PM
Component/s: Inheritance and Interpolation
Affects Version/s: None
Fix Version/s: None

Time Tracking:
Not Specified

File Attachments: 1. Zip Archive mvn-multiproject.zip (14 kB)
2. Text File org.maven.ide.eclipse-MNGECLIPSE-20-patch.txt (8 kB)

Image Attachments:

1. mngeclipse20-trigger.jpg
(13 kB)
Environment: win xp, maven 2.0.1, eclipse plugin 0.0.3, eclipse 3.1
Issue Links:
Duplicate
Related
dependent
 

Complexity: Intermediate


 Description  « Hide
My project is a ear multiproject. It has 5 modules, that have internal dependencies. For example web module needs app and type modules.

I usually use following declaration for this kind of dependencies. Note that I'm using ${version} in dependency. In result I'm requesting foo-type jar of the same version as current project.

<project>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>foo</groupId>
<artifactId>foo</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>foo-app</artifactId>

<dependencies>
<dependency>
<groupId>foo</groupId>
<artifactId>foo-type</artifactId>
<version>${version}</version>
</dependency>
</dependencies>
</project>

This works from commandline, but doesn't work in eclipse plugin. I get following message:

"Unable to download the artifact from any repository foo:foo-type-2.4.1.jar"

Maven (or maven plugin) tries to download foo-type module in very strange version (instead 0.0.1-SNAPSHOT)!

I've attached simple multimodule project.



 All   Comments   Work Log   Change History      Sort Order: Ascending order - Click to sort in descending order
Eugene Kuleshov added a comment - 20/Jan/06 02:36 AM
Jason, this is happening with 2.0.2 embedder. The strange thing that execute install from the embedder is working fine, but readProjectWithDependencies() is pulling off version "2.4.1" out of nowhere.

Eugene Kuleshov added a comment - 06/Mar/06 12:31 AM
Same problem with embedder 2.0.3

Jozef Kotlár added a comment - 30/Apr/06 02:26 PM
With version 0.0.7 (e.g. embedder 2.0.4) there seems to be used correct versions in provided sample project.

Eugene Kuleshov added a comment - 08/Jun/06 12:29 AM
Veified against trunk version. Probably been working in earlier versions too.

Daniel Schulz added a comment - 04/Nov/06 02:02 PM
quick explanation:

i found the reason for the "${pom.version} > 2.4.1" problem. there is a system property of name "version" set to "2.4.1" in your eclipse jvm (see [Eclipse]>Help->About Eclipse Platform->Configuration Details).

more detailed explanation:

Some eclipse plugin or component (no names please) set it. it does'nt matter if you set pom.version, project.version, env.version or a property of name version. if a system property of that name ist set, it beats them all, because the pom variable evaluation order is 1) system properties, 2) project properties and at last 3) pom properties via reflection (see org.apache.maven.project.interpolation.RegexBasedModelInterpolator for Details). Try it by calling "mvn -Dversion=2.4.1 install".

possible quick fix:

I fixed the problem by adding an overloaded RegexBasedModelInterpolator-Implementation to my copy of m2eclipse, that filters out the system property "version" and gets version from POM. (Patch file added).

possible not so quick fix:

The impl of RegexBasedModelInterpolator should be changed. By using ${pom.version} everyone expects, that an evaluator reads out the version property of the POM. I'll look if there is already an issue for that.

BTW and in the future everyone should use ${pom.version}. Using ${version} is dangerous, because it uses a side effect of the RegexBasedModelInterpolator implementation.


Daniel Schulz added a comment - 04/Nov/06 02:05 PM
again the quick explanation:

i found the reason for the "${pom.version} is 2.4.1" problem. there is a system property of name "version" set to "2.4.1" in your eclipse jvm (see [Eclipse]->Help->About Eclipse Platform->Configuration Details).


Daniel Schulz added a comment - 04/Nov/06 03:57 PM
Patch with changed RegexBasedModelInterpolator impl.

Daniel Schulz added a comment - 06/Nov/06 01:41 AM
problem trigger

Michal Stochmialek added a comment - 06/Nov/06 02:14 AM
Basing on Daniel's comments the issue should be reopened.

Eugene Kuleshov added a comment - 06/Nov/06 02:24 AM
Folks, please report it to the Maven Embedder component. This issue should be fixed in there and not worked around in the plugin.

Nathan Pruett added a comment - 22/May/07 09:38 AM - edited
This should be left as an open issue until it is fixed in Maven Embedder (MNG-2651) and the new version of Maven Embedder is included in the Eclipse plugin.

Kenney Westerhof added a comment - 16/Jun/07 03:39 AM
I'm tempted to 'close - won't fix'.
${version} is evaluated to either a system prop or a -Dversion=..., so this is expected.

However, ${pom.version} should be evaluated to the pom's <version> tag. But that's a different issue alltogether.