You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by "Josh Guice (JIRA)" <ji...@apache.org> on 2009/09/17 18:52:58 UTC

[jira] Created: (IVY-1126) Module eviction applies 's of dependencies instead of honoring default inclusion of root module

Module eviction applies <include/>'s of dependencies instead of honoring default inclusion of root module
---------------------------------------------------------------------------------------------------------

                 Key: IVY-1126
                 URL: https://issues.apache.org/jira/browse/IVY-1126
             Project: Ivy
          Issue Type: Bug
    Affects Versions: 2.1.0-RC2, 2.1.0-RC1
         Environment: Ant 1.7.1 running Ivy ant tasks, all platorms
            Reporter: Josh Guice
            Priority: Minor


I'm going to describe the exact situation this apparent bug happens in (although there might be a more general case of the problem).

Suppose we have modules A, B, and C.  A depends directly on C by declaring the following:

    <dependency org="COMPANY" name="C" rev="latest.integration">
      <exclude name="build" type="xml"/>
    </dependency>

A also depends directly on B as follows:

    <dependency org="COMPANY" name="B" rev="latest.integration"/>

And B depends directly on C as follows:

    <dependency org="COMPANY" name="C" rev="latest.integration">
      <include name="lib/file1" ext="jar" matcher="exactOrRegexp"/>
      <include name="lib/file2" ext="jar" matcher="exactOrRegexp"/>
    </dependency>

When a build of A is ran and there is no conflict between versions of C, all of C's artifacts are used in the build of A.  However, when there is a conflict between the version of C that A depends and the version of C that B depends, only the artifacts specified by B's include are used.  This is the case even when the conflict resolution selects the version of C that A depends on.

What's also interesting is that if A depends on multiple modules that depend on C (and include different parts), what A ends up getting is the union of those inclusions.

When I realized that the specific includes declared by the "sub" modules appeared to be clobbering the unspecified default inclusion of everything (except the build.xml) defined in the "root" module I was able to find the following workaround:

    <dependency org="COMPANY" name="C" rev="latest.integration">
      <include name="*"/>
      <exclude name="build" type="xml"/>
    </dependency>

By explicitly including all of C's artifacts in A's dependency declaration the problem goes away.

I still feel this is a bug though because when no eviction occurs all of C's artifacts are used.  Only when there is an eviction does the inclusion issue appear (even when the same version is selected that would be chosen if there was no conflict).  It seems to me that the behavior of the system when there is no conflict and version X is used should be the same as when there *is* a conflict and version X is selected.

Thanks,
Josh

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.