Maven 2 & 3

test scope in dependencyManagement does not appear to be transitive to dependent subProjects

Details

  • Type: Bug Bug
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Duplicate
  • Affects Version/s: 2.0.1
  • Fix Version/s: None
  • Component/s: None
  • Labels:
    None
  • Environment:
    jdk1.5.0_04, mvn 2.0.1
  • Complexity:
    Intermediate
  • Number of attachments :
    0

Description

If we have a root pom.xml that includes dependencyManagement and specifies the scope on a dependent component to be test, it's picked up in a subproject, but it's does not appear to be transitive.

e.g. parent pom

<dependencyMgmt>
<dependency>
<artifactId>easymock</artifactId>
...
<scope>test</scope>
</dependency>
</dependencyMgmt>

child pom

<dependency>
<artifactId>easymock</artifactId>
</dependency>

peer pom

<dependency>
<artifactId>child</artifactId>
</dependency>
<dependency>
<artifactId>easymock</artifactId>
</dependency>

The peer pom gets compilation exceptions indicating that it can't find the package specified by the dependent jar easymock. The easymock jar is nowhere in the classpath.

Judging by this: http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
the test scope should be transitive.

Brian

Issue Links

Activity

Hide
Brian Bonner added a comment -

I made an error.

The peer pom only looks like this:

<dependency>
<artifactId>child</artifactId>
</dependency>

and has no reference to easymock, however it should pick it up transitively, or so I believe.

Show
Brian Bonner added a comment - I made an error. The peer pom only looks like this: <dependency> <artifactId>child</artifactId> </dependency> and has no reference to easymock, however it should pick it up transitively, or so I believe.
Hide
Brett Porter added a comment -

I don't think this is a bug.

Let me understand:
child inherits parent, but peer does not?

dependency management is not transitive, however the easymock in the child should already be transitive to the peer. But tests scope jars are not.

There are other problems here: eg, no group ID.

Show
Brett Porter added a comment - I don't think this is a bug. Let me understand: child inherits parent, but peer does not? dependency management is not transitive, however the easymock in the child should already be transitive to the peer. But tests scope jars are not. There are other problems here: eg, no group ID.
Hide
Brian Bonner added a comment -

You are correct, I had the example trimmed to illustrate the hierarchy issue. I'll try to include a more complete test case in the future.

Child inherits parent (dependency mgmt info for test), but dependent peer was not getting the test scope dependency that the peer project it depended on had.

I think the crux is that I didn't realize that test scope jars were not transitive. Can you help me understand why?

If this is the case, then I'll just have to declare the test dependencies in each module that also needs the test scope jars. Is this correct?

Thanks.

Show
Brian Bonner added a comment - You are correct, I had the example trimmed to illustrate the hierarchy issue. I'll try to include a more complete test case in the future. Child inherits parent (dependency mgmt info for test), but dependent peer was not getting the test scope dependency that the peer project it depended on had. I think the crux is that I didn't realize that test scope jars were not transitive. Can you help me understand why? If this is the case, then I'll just have to declare the test dependencies in each module that also needs the test scope jars. Is this correct? Thanks.

People

Vote (0)
Watch (1)

Dates

  • Created:
    Updated:
    Resolved: