You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by "Tom Liu (JIRA)" <ji...@apache.org> on 2010/10/08 05:45:30 UTC

[jira] Created: (IVY-1236) Dynamic version resolution result is incorrect when ivy metadata contains extra attributes.

Dynamic version resolution result is incorrect when ivy metadata contains extra attributes.
-------------------------------------------------------------------------------------------

                 Key: IVY-1236
                 URL: https://issues.apache.org/jira/browse/IVY-1236
             Project: Ivy
          Issue Type: Bug
          Components: Core
    Affects Versions: 2.2.0
            Reporter: Tom Liu


Ivy resolution is incorrect given the following configuration:

ivy metadata of logging#slf4j;1.6.1
<ivy-module version="2.0" xmlns:extra="http://ant.apache.org/ivy/extra">
    <info organisation="logging" module="slf4j" revision="1.6.1" extra:tag="logging">
	<description>Front end logging API.</description>
	</info>
    <configurations>
       <conf name="runtime" description="Core runtime dependencies"/>
       <conf name="jcl-bridge" extends="runtime" description="Jakarta Commons Logging Bridge dependencies"/>
       <conf name="jul-bridge" extends="runtime" description="Java Util Logging Bridge dependencies"/>
       <conf name="log4j-bridge" extends="runtime" description="Apache Log4J Bridge dependencies"/>
       <conf name="bridges" extends="jcl-bridge,jul-bridge,log4j-bridge" description="Groups all logging bridge dependencies"/>
   </configurations>
   <publications>
       <artifact name="slf4j-api-1.6.1" type="jar" ext="jar" conf="runtime"/>
       <artifact name="jcl-over-slf4j-1.6.1" type="jar" ext="jar" conf="jcl-bridge"/>
       <artifact name="jul-to-slf4j-1.6.1" type="jar" ext="jar" conf="jul-bridge"/>
       <artifact name="log4j-over-slf4j-1.6.1" type="jar" ext="jar" conf="log4j-bridge"/>
   </publications>
</ivy-module>

ivy metadata of logging#logback;0.9.24 ivy: 
<ivy-module version="2.0">
    <info organisation="logging" module="logback" revision="0.9.24">
       <description>Back end logging implementation that implements SLF4J (successor to Log4J).</description>
    </info>
    <configurations>
       <conf name="runtime" description="Core runtime dependencies"/>
    </configurations>
    <publications>
       <artifact name="logback-core-0.9.24" type="jar" ext="jar" conf="runtime"/>
       <artifact name="logback-classic-0.9.24" type="jar" ext="jar" conf="runtime"/>
    </publications>
    <dependencies>
       <dependency org="logging" name="slf4j" rev="1.6.1" conf="runtime->bridges"/>
    </dependencies>
</ivy-module>

Dependencies to resolve:
<dependency org="logging" name="slf4j" rev="[1.6.1, 1.6.2]" conf="runtime"/>
<dependency org="logging" name="logback" rev="[0.9.24, 0.9.25]" conf="build-tests->runtime" />

I would expect the following jars of slf4j are resolved:
slf4-api-1.6.1.jar, jcl-over-slf4j-1.6.1.jar, jul-to-slf4j-1.6.1.jar, log4j-over-slf4j-1.6.1.jar
However, only slf4j-api-1.6.1.jar is resolved.

A eclipse project is attached to demonstrate the issue.
ivy metadata for slf4j 1.6.1: repo\logging\slf4j\1.6.1\ivy.xml)
ivy metadata for logback 0.9.24: repo\logging\logback\0.9.24\ivy.xml


I've debugged through and found that VisitNode does not deal with dynamic version correctly, so that when slf4j contains extra attributes, it behaves incorrectly:
org.apache.ivy.core.resolve.VisitNode: line 286 - 302
public boolean loadData(String conf, boolean shouldBePublic) {
    boolean loaded = node.loadData(
    rootModuleConf, getParentNode(), parentConf, conf, shouldBePublic, getUsage());
    if (loaded) {
        useRealNode();
        // if the loaded revision is different from original one
        // we now register this node on the new resolved id
        // this includes two cases:
        // - the id refers to a dynamic revision, which has beenresolved by loadData
        // - the loaded module descriptor has extra attributes in his info tag which are not
        //   used when declaring the dependency
        if (data.getNode(node.getResolvedId()) == null || !data.getNode(node.getResolvedId()).getId().equals(node.getResolvedId()))
        {
               data.register(node.getResolvedId(), this);
			   
               /** If node's id is dynamic, e.g. logging#slf4j;[1.6.1, 1.6.2], then the VisitNode will not be associated with it because only resolvedId is considered here*/
               /** The following fix associates dynamic id with VisitData as well */
               /** FIX START **/
               if(!node.getResolvedId().equals(node.getId())) {
                   ModuleRevisionId resolvedId = node.getResolvedId();
                   data.register(ModuleRevisionId.newInstance(resolvedId.getOrganisation(), resolvedId.getName(),  resolvedId.getBranch(), resolvedId.getRevision()), this);
               }
               /** FIX END **/
        }
    }

    return loaded;
}

I've applied this fix to handle dynamic version and then the resolution works fine.


Thanks,
Tom

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


[jira] Updated: (IVY-1236) Dynamic version resolution result is incorrect when ivy metadata contains extra attributes.

Posted by "Tom Liu (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/IVY-1236?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Tom Liu updated IVY-1236:
-------------------------

    Attachment: dynamic_version_bug.zip

The eclipse project of reproduction.

> Dynamic version resolution result is incorrect when ivy metadata contains extra attributes.
> -------------------------------------------------------------------------------------------
>
>                 Key: IVY-1236
>                 URL: https://issues.apache.org/jira/browse/IVY-1236
>             Project: Ivy
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.2.0
>            Reporter: Tom Liu
>         Attachments: dynamic_version_bug.zip
>
>
> Ivy resolution is incorrect given the following configuration:
> ivy metadata of logging#slf4j;1.6.1
> <ivy-module version="2.0" xmlns:extra="http://ant.apache.org/ivy/extra">
>     <info organisation="logging" module="slf4j" revision="1.6.1" extra:tag="logging">
> 	<description>Front end logging API.</description>
> 	</info>
>     <configurations>
>        <conf name="runtime" description="Core runtime dependencies"/>
>        <conf name="jcl-bridge" extends="runtime" description="Jakarta Commons Logging Bridge dependencies"/>
>        <conf name="jul-bridge" extends="runtime" description="Java Util Logging Bridge dependencies"/>
>        <conf name="log4j-bridge" extends="runtime" description="Apache Log4J Bridge dependencies"/>
>        <conf name="bridges" extends="jcl-bridge,jul-bridge,log4j-bridge" description="Groups all logging bridge dependencies"/>
>    </configurations>
>    <publications>
>        <artifact name="slf4j-api-1.6.1" type="jar" ext="jar" conf="runtime"/>
>        <artifact name="jcl-over-slf4j-1.6.1" type="jar" ext="jar" conf="jcl-bridge"/>
>        <artifact name="jul-to-slf4j-1.6.1" type="jar" ext="jar" conf="jul-bridge"/>
>        <artifact name="log4j-over-slf4j-1.6.1" type="jar" ext="jar" conf="log4j-bridge"/>
>    </publications>
> </ivy-module>
> ivy metadata of logging#logback;0.9.24 ivy: 
> <ivy-module version="2.0">
>     <info organisation="logging" module="logback" revision="0.9.24">
>        <description>Back end logging implementation that implements SLF4J (successor to Log4J).</description>
>     </info>
>     <configurations>
>        <conf name="runtime" description="Core runtime dependencies"/>
>     </configurations>
>     <publications>
>        <artifact name="logback-core-0.9.24" type="jar" ext="jar" conf="runtime"/>
>        <artifact name="logback-classic-0.9.24" type="jar" ext="jar" conf="runtime"/>
>     </publications>
>     <dependencies>
>        <dependency org="logging" name="slf4j" rev="1.6.1" conf="runtime->bridges"/>
>     </dependencies>
> </ivy-module>
> Dependencies to resolve:
> <dependency org="logging" name="slf4j" rev="[1.6.1, 1.6.2]" conf="runtime"/>
> <dependency org="logging" name="logback" rev="[0.9.24, 0.9.25]" conf="build-tests->runtime" />
> I would expect the following jars of slf4j are resolved:
> slf4-api-1.6.1.jar, jcl-over-slf4j-1.6.1.jar, jul-to-slf4j-1.6.1.jar, log4j-over-slf4j-1.6.1.jar
> However, only slf4j-api-1.6.1.jar is resolved.
> A eclipse project is attached to demonstrate the issue.
> ivy metadata for slf4j 1.6.1: repo\logging\slf4j\1.6.1\ivy.xml)
> ivy metadata for logback 0.9.24: repo\logging\logback\0.9.24\ivy.xml
> I've debugged through and found that VisitNode does not deal with dynamic version correctly, so that when slf4j contains extra attributes, it behaves incorrectly:
> org.apache.ivy.core.resolve.VisitNode: line 286 - 302
> public boolean loadData(String conf, boolean shouldBePublic) {
>     boolean loaded = node.loadData(
>     rootModuleConf, getParentNode(), parentConf, conf, shouldBePublic, getUsage());
>     if (loaded) {
>         useRealNode();
>         // if the loaded revision is different from original one
>         // we now register this node on the new resolved id
>         // this includes two cases:
>         // - the id refers to a dynamic revision, which has beenresolved by loadData
>         // - the loaded module descriptor has extra attributes in his info tag which are not
>         //   used when declaring the dependency
>         if (data.getNode(node.getResolvedId()) == null || !data.getNode(node.getResolvedId()).getId().equals(node.getResolvedId()))
>         {
>                data.register(node.getResolvedId(), this);
> 			   
>                /** If node's id is dynamic, e.g. logging#slf4j;[1.6.1, 1.6.2], then the VisitNode will not be associated with it because only resolvedId is considered here*/
>                /** The following fix associates dynamic id with VisitData as well */
>                /** FIX START **/
>                if(!node.getResolvedId().equals(node.getId())) {
>                    ModuleRevisionId resolvedId = node.getResolvedId();
>                    data.register(ModuleRevisionId.newInstance(resolvedId.getOrganisation(), resolvedId.getName(),  resolvedId.getBranch(), resolvedId.getRevision()), this);
>                }
>                /** FIX END **/
>         }
>     }
>     return loaded;
> }
> I've applied this fix to handle dynamic version and then the resolution works fine.
> Thanks,
> Tom

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


[jira] Updated: (IVY-1236) Dynamic version resolution result is incorrect when ivy metadata contains extra attributes.

Posted by "Tom Liu (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/IVY-1236?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Tom Liu updated IVY-1236:
-------------------------

    Attachment:     (was: dynamic_version_bug.zip)

> Dynamic version resolution result is incorrect when ivy metadata contains extra attributes.
> -------------------------------------------------------------------------------------------
>
>                 Key: IVY-1236
>                 URL: https://issues.apache.org/jira/browse/IVY-1236
>             Project: Ivy
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.2.0
>            Reporter: Tom Liu
>
> Ivy resolution is incorrect given the following configuration:
> ivy metadata of logging#slf4j;1.6.1
> <ivy-module version="2.0" xmlns:extra="http://ant.apache.org/ivy/extra">
>     <info organisation="logging" module="slf4j" revision="1.6.1" extra:tag="logging">
> 	<description>Front end logging API.</description>
> 	</info>
>     <configurations>
>        <conf name="runtime" description="Core runtime dependencies"/>
>        <conf name="jcl-bridge" extends="runtime" description="Jakarta Commons Logging Bridge dependencies"/>
>        <conf name="jul-bridge" extends="runtime" description="Java Util Logging Bridge dependencies"/>
>        <conf name="log4j-bridge" extends="runtime" description="Apache Log4J Bridge dependencies"/>
>        <conf name="bridges" extends="jcl-bridge,jul-bridge,log4j-bridge" description="Groups all logging bridge dependencies"/>
>    </configurations>
>    <publications>
>        <artifact name="slf4j-api-1.6.1" type="jar" ext="jar" conf="runtime"/>
>        <artifact name="jcl-over-slf4j-1.6.1" type="jar" ext="jar" conf="jcl-bridge"/>
>        <artifact name="jul-to-slf4j-1.6.1" type="jar" ext="jar" conf="jul-bridge"/>
>        <artifact name="log4j-over-slf4j-1.6.1" type="jar" ext="jar" conf="log4j-bridge"/>
>    </publications>
> </ivy-module>
> ivy metadata of logging#logback;0.9.24 ivy: 
> <ivy-module version="2.0">
>     <info organisation="logging" module="logback" revision="0.9.24">
>        <description>Back end logging implementation that implements SLF4J (successor to Log4J).</description>
>     </info>
>     <configurations>
>        <conf name="runtime" description="Core runtime dependencies"/>
>     </configurations>
>     <publications>
>        <artifact name="logback-core-0.9.24" type="jar" ext="jar" conf="runtime"/>
>        <artifact name="logback-classic-0.9.24" type="jar" ext="jar" conf="runtime"/>
>     </publications>
>     <dependencies>
>        <dependency org="logging" name="slf4j" rev="1.6.1" conf="runtime->bridges"/>
>     </dependencies>
> </ivy-module>
> Dependencies to resolve:
> <dependency org="logging" name="slf4j" rev="[1.6.1, 1.6.2]" conf="runtime"/>
> <dependency org="logging" name="logback" rev="[0.9.24, 0.9.25]" conf="build-tests->runtime" />
> I would expect the following jars of slf4j are resolved:
> slf4-api-1.6.1.jar, jcl-over-slf4j-1.6.1.jar, jul-to-slf4j-1.6.1.jar, log4j-over-slf4j-1.6.1.jar
> However, only slf4j-api-1.6.1.jar is resolved.
> A eclipse project is attached to demonstrate the issue.
> ivy metadata for slf4j 1.6.1: repo\logging\slf4j\1.6.1\ivy.xml)
> ivy metadata for logback 0.9.24: repo\logging\logback\0.9.24\ivy.xml
> I've debugged through and found that VisitNode does not deal with dynamic version correctly, so that when slf4j contains extra attributes, it behaves incorrectly:
> org.apache.ivy.core.resolve.VisitNode: line 286 - 302
> public boolean loadData(String conf, boolean shouldBePublic) {
>     boolean loaded = node.loadData(
>     rootModuleConf, getParentNode(), parentConf, conf, shouldBePublic, getUsage());
>     if (loaded) {
>         useRealNode();
>         // if the loaded revision is different from original one
>         // we now register this node on the new resolved id
>         // this includes two cases:
>         // - the id refers to a dynamic revision, which has beenresolved by loadData
>         // - the loaded module descriptor has extra attributes in his info tag which are not
>         //   used when declaring the dependency
>         if (data.getNode(node.getResolvedId()) == null || !data.getNode(node.getResolvedId()).getId().equals(node.getResolvedId()))
>         {
>                data.register(node.getResolvedId(), this);
> 			   
>                /** If node's id is dynamic, e.g. logging#slf4j;[1.6.1, 1.6.2], then the VisitNode will not be associated with it because only resolvedId is considered here*/
>                /** The following fix associates dynamic id with VisitData as well */
>                /** FIX START **/
>                if(!node.getResolvedId().equals(node.getId())) {
>                    ModuleRevisionId resolvedId = node.getResolvedId();
>                    data.register(ModuleRevisionId.newInstance(resolvedId.getOrganisation(), resolvedId.getName(),  resolvedId.getBranch(), resolvedId.getRevision()), this);
>                }
>                /** FIX END **/
>         }
>     }
>     return loaded;
> }
> I've applied this fix to handle dynamic version and then the resolution works fine.
> Thanks,
> Tom

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


[jira] Updated: (IVY-1236) Dynamic version resolution result is incorrect when ivy metadata contains extra attributes.

Posted by "Tom Liu (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/IVY-1236?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Tom Liu updated IVY-1236:
-------------------------

    Attachment: dynamic_version_bug.zip

> Dynamic version resolution result is incorrect when ivy metadata contains extra attributes.
> -------------------------------------------------------------------------------------------
>
>                 Key: IVY-1236
>                 URL: https://issues.apache.org/jira/browse/IVY-1236
>             Project: Ivy
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.2.0
>            Reporter: Tom Liu
>         Attachments: dynamic_version_bug.zip
>
>
> Ivy resolution is incorrect given the following configuration:
> ivy metadata of logging#slf4j;1.6.1
> <ivy-module version="2.0" xmlns:extra="http://ant.apache.org/ivy/extra">
>     <info organisation="logging" module="slf4j" revision="1.6.1" extra:tag="logging">
> 	<description>Front end logging API.</description>
> 	</info>
>     <configurations>
>        <conf name="runtime" description="Core runtime dependencies"/>
>        <conf name="jcl-bridge" extends="runtime" description="Jakarta Commons Logging Bridge dependencies"/>
>        <conf name="jul-bridge" extends="runtime" description="Java Util Logging Bridge dependencies"/>
>        <conf name="log4j-bridge" extends="runtime" description="Apache Log4J Bridge dependencies"/>
>        <conf name="bridges" extends="jcl-bridge,jul-bridge,log4j-bridge" description="Groups all logging bridge dependencies"/>
>    </configurations>
>    <publications>
>        <artifact name="slf4j-api-1.6.1" type="jar" ext="jar" conf="runtime"/>
>        <artifact name="jcl-over-slf4j-1.6.1" type="jar" ext="jar" conf="jcl-bridge"/>
>        <artifact name="jul-to-slf4j-1.6.1" type="jar" ext="jar" conf="jul-bridge"/>
>        <artifact name="log4j-over-slf4j-1.6.1" type="jar" ext="jar" conf="log4j-bridge"/>
>    </publications>
> </ivy-module>
> ivy metadata of logging#logback;0.9.24 ivy: 
> <ivy-module version="2.0">
>     <info organisation="logging" module="logback" revision="0.9.24">
>        <description>Back end logging implementation that implements SLF4J (successor to Log4J).</description>
>     </info>
>     <configurations>
>        <conf name="runtime" description="Core runtime dependencies"/>
>     </configurations>
>     <publications>
>        <artifact name="logback-core-0.9.24" type="jar" ext="jar" conf="runtime"/>
>        <artifact name="logback-classic-0.9.24" type="jar" ext="jar" conf="runtime"/>
>     </publications>
>     <dependencies>
>        <dependency org="logging" name="slf4j" rev="1.6.1" conf="runtime->bridges"/>
>     </dependencies>
> </ivy-module>
> Dependencies to resolve:
> <dependency org="logging" name="slf4j" rev="[1.6.1, 1.6.2]" conf="runtime"/>
> <dependency org="logging" name="logback" rev="[0.9.24, 0.9.25]" conf="build-tests->runtime" />
> I would expect the following jars of slf4j are resolved:
> slf4-api-1.6.1.jar, jcl-over-slf4j-1.6.1.jar, jul-to-slf4j-1.6.1.jar, log4j-over-slf4j-1.6.1.jar
> However, only slf4j-api-1.6.1.jar is resolved.
> A eclipse project is attached to demonstrate the issue.
> ivy metadata for slf4j 1.6.1: repo\logging\slf4j\1.6.1\ivy.xml)
> ivy metadata for logback 0.9.24: repo\logging\logback\0.9.24\ivy.xml
> I've debugged through and found that VisitNode does not deal with dynamic version correctly, so that when slf4j contains extra attributes, it behaves incorrectly:
> org.apache.ivy.core.resolve.VisitNode: line 286 - 302
> public boolean loadData(String conf, boolean shouldBePublic) {
>     boolean loaded = node.loadData(
>     rootModuleConf, getParentNode(), parentConf, conf, shouldBePublic, getUsage());
>     if (loaded) {
>         useRealNode();
>         // if the loaded revision is different from original one
>         // we now register this node on the new resolved id
>         // this includes two cases:
>         // - the id refers to a dynamic revision, which has beenresolved by loadData
>         // - the loaded module descriptor has extra attributes in his info tag which are not
>         //   used when declaring the dependency
>         if (data.getNode(node.getResolvedId()) == null || !data.getNode(node.getResolvedId()).getId().equals(node.getResolvedId()))
>         {
>                data.register(node.getResolvedId(), this);
> 			   
>                /** If node's id is dynamic, e.g. logging#slf4j;[1.6.1, 1.6.2], then the VisitNode will not be associated with it because only resolvedId is considered here*/
>                /** The following fix associates dynamic id with VisitData as well */
>                /** FIX START **/
>                if(!node.getResolvedId().equals(node.getId())) {
>                    ModuleRevisionId resolvedId = node.getResolvedId();
>                    data.register(ModuleRevisionId.newInstance(resolvedId.getOrganisation(), resolvedId.getName(),  resolvedId.getBranch(), resolvedId.getRevision()), this);
>                }
>                /** FIX END **/
>         }
>     }
>     return loaded;
> }
> I've applied this fix to handle dynamic version and then the resolution works fine.
> Thanks,
> Tom

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