I think you're questioning if you have this: <dependencyManagement> <dependencies> <dependency> <artifactId>foo</artifactId> <groupId>com</groupId> <version>1</version> </dependency> </dependencies> </dependencyManagement>
<dependencies> <dependency> <artifactId>foo</artifactId> <groupId>com</groupId> <version>2</version> </dependency> </dependencies> Should you get 1 or 2? Without the direct dependency, you should get 1 if pulled in transitively. With the direct dependency as shown, you should get 2. I think you always need to maintain the ability to override at a child level if needed. This has some consequences if the depMgt was inherited and sibling dependencies are used since they would ignore the declared direct dependency in some cases. Is that why you think the behavior is wrong? -----Original Message----- From: Kenney Westerhof [mailto:[EMAIL PROTECTED] Sent: Saturday, June 16, 2007 7:06 AM To: Maven Developers List Subject: depMgt (mng-1577 again....) Hi, Just did some test wrt MNG-2340 (using maven 2.0.7 and 2.0.6), and this is what I found: P with dependencyManagement for lucene 1.3 | + my-dep with dependency on lucene 1.4.3 + my-app with dependency on my-dep (I modified the attached project locally; rename my-app to my-dep and add my-app with a dep on my-dep). When building my-dep, after installing P, I get lucene 1.4.3, so depMgt is used for DEFAULTS for direct dependencies. When building my-app, after installing P and my-dep, I get lucene 1.3. So depMgt is used as OVERRIDE for transitive dependencies. When I add a dep on lucene without a version in my-app, I get 1.3 aswell. When I add a dep on lucene 1.4.2 in my-app I get lucene 1.4.2. (luckily this also happens when building from the reactor). This is one of the many possible implementations I described in http://docs.codehaus.org/display/MAVEN/Maven+2.1+Artifact+Resolution+Specification, and it's one that I don't think we should support. The meaning of depMgt is different, applied to either local deps or transitive deps, and it's not consistent. This somewhat describes the situation: - depMgt for artifact X is used to provide defaults for direct dependencies of artifact X, and for overrides of transitive dependencies on X, unless there's also a direct dependency on X in which case the direct dependency is used. I'm sure this is not intended, so what should the intended behaviour be? Either we keep the 'child overrides' that's globally present in all of maven, so that dependencies can override depMgt, as is the case now, and also apply that to transitive deps, OR we let depMgt override both local and transitive deps. Or, is this the intended behaviour after all? -- Kenney --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]