ant-notifications mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Josh Guice (JIRA)" <j...@apache.org>
Subject [jira] Created: (IVY-1126) Module eviction applies <include/>'s of dependencies instead of honoring default inclusion of root module
Date Thu, 17 Sep 2009 16:52:58 GMT
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.


Mime
View raw message