[ 
https://issues.apache.org/jira/browse/IVY-590?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12523795
 ] 

jarwyp edited comment on IVY-590 at 8/30/07 1:53 AM:
-------------------------------------------------------------------

I met the same problem with to current SVN head. I hunted it down in the code.
in ResolveEngine.getDependencies:
...
                    if (allEvicted) {
                        Message.verbose("all callers are evicted for " + node + 
": evicting too");
                        node.markEvicted(confs[i], null, null, null);
                    } else {
                        if (settings.debugConflictResolution()) {
                            Message.debug(node.getId()
                                  + " isn't transitively evicted, at least one 
caller was" 
                                  + " not evicted");
                        }
                    }
...
the line with markEvicted can be traced to  the default constructor of 
IvyNodeEviction.EvictionData where there is no check against null arguments. A 
simple fix:
Index: src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java
===================================================================
--- src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java   (wersja 571054)
+++ src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java   (kopia robocza)
@@ -45,13 +45,15 @@
             this.parent = parent;
             this.conflictManager = conflictManager;
             this.selected = selected;
-            for (Iterator iter = selected.iterator(); iter.hasNext();) {
-                Object o = (Object) iter.next();
-                if (!(o instanceof IvyNode)) {
-                    throw new IllegalArgumentException(
-                            "selected nodes must be instance of IvyNode. 
Found: "
-                                    + o.getClass().getName());
-                }
+            if(selected!=null){
+                   for (Iterator iter = selected.iterator(); iter.hasNext();) {
+                       Object o = (Object) iter.next();
+                       if (!(o instanceof IvyNode)) {
+                           throw new IllegalArgumentException(
+                                   "selected nodes must be instance of 
IvyNode. Found: "
+                                           + o.getClass().getName());
+                       }
+                   }
             }
         }

solved the issue for me.

* God bless wiki systems and emoticons - I will include the patch in attachments

      was (Author: jarwyp):
    I met the same problem with to current SVN head. I hunted it down in the 
code.
in ResolveEngine.getDependencies:
...
                    if (allEvicted) {
                        Message.verbose("all callers are evicted for " + node + 
": evicting too");
                        node.markEvicted(confs[i], null, null, null);
                    } else {
                        if (settings.debugConflictResolution()) {
                            Message.debug(node.getId()
                                  + " isn't transitively evicted, at least one 
caller was" 
                                  + " not evicted");
                        }
                    }
...
the line with markEvicted can be traced to  the default constructor of 
IvyNodeEviction.EvictionData where there is no check against null arguments. A 
simple fix:
Index: src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java
===================================================================
--- src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java   (wersja 571054)
+++ src/java/org/apache/ivy/core/resolve/IvyNodeEviction.java   (kopia robocza)
@@ -45,13 +45,15 @@
             this.parent = parent;
             this.conflictManager = conflictManager;
             this.selected = selected;
-            for (Iterator iter = selected.iterator(); iter.hasNext();) {
-                Object o = (Object) iter.next();
-                if (!(o instanceof IvyNode)) {
-                    throw new IllegalArgumentException(
-                            "selected nodes must be instance of IvyNode. 
Found: "
-                                    + o.getClass().getName());
-                }
+            if(selected!=null){
+                   for (Iterator iter = selected.iterator(); iter.hasNext();) {
+                       Object o = (Object) iter.next();
+                       if (!(o instanceof IvyNode)) {
+                           throw new IllegalArgumentException(
+                                   "selected nodes must be instance of 
IvyNode. Found: "
+                                           + o.getClass().getName());
+                       }
+                   }
             }
         }

solved the issue for me.

  
> NullPointerException whilst resolving transitive dependencies.
> --------------------------------------------------------------
>
>                 Key: IVY-590
>                 URL: https://issues.apache.org/jira/browse/IVY-590
>             Project: Ivy
>          Issue Type: Bug
>    Affects Versions: 2.0.0-alpha-2
>            Reporter: Ross Clewley
>            Assignee: Maarten Coene
>
> During a resolve of a transitive configuration we see 
> java.lang.NullPointerException
>        at 
> org.apache.ivy.core.resolve.IvyNodeEviction$EvictionData.<init>(IvyNodeEviction.java:48)
>        at 
> org.apache.ivy.core.resolve.IvyNodeEviction.markEvicted(IvyNodeEviction.java:266)
>        at org.apache.ivy.core.resolve.IvyNode.markEvicted(IvyNode.java:1101)
>        at 
> org.apache.ivy.core.resolve.ResolveEngine.getDependencies(ResolveEngine.java:523)
>        at 
> org.apache.ivy.core.resolve.ResolveEngine.resolve(ResolveEngine.java:236)
>        at 
> org.apache.ivy.core.resolve.ResolveEngine.resolve(ResolveEngine.java:194)
>        at org.apache.ivy.Ivy.resolve(Ivy.java:256)
>        at org.apache.ivy.ant.IvyResolve.doExecute(IvyResolve.java:207)
>        at org.apache.ivy.ant.IvyTask.execute(IvyTask.java:281)
>        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:288)
>        at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
>        at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>        at java.lang.reflect.Method.invoke(Method.java:585)
>        at 
> org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:105)
>        at org.apache.tools.ant.Task.perform(Task.java:348)
>        at org.apache.tools.ant.Target.execute(Target.java:357)
>        at org.apache.tools.ant.Target.performTasks(Target.java:385)
>        at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1329)
>        at org.apache.tools.ant.Project.executeTarget(Project.java:1298)
>        at 
> org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41)
>        at org.apache.tools.ant.Project.executeTargets(Project.java:1181)
>        at org.apache.tools.ant.Main.runBuild(Main.java:698)
>        at org.apache.tools.ant.Main.startAnt(Main.java:199)
>        at org.apache.tools.ant.launch.Launcher.run(Launcher.java:257)
>        at org.apache.tools.ant.launch.Launcher.main(Launcher.java:104)
> It's difficult to provide a simple testcase for this as I've only seen it in 
> our large modular build system and it's sensitive to things like the order of 
> the dependencies. 
> The modules use the following configurations
>    <conf name="default"   extends="package" transitive="true"/>
>    <conf name="compile"   extends="default" visibility="private" 
> transitive="false"/>
>    <conf name="runtime"   extends="default" visibility="public"  
> transitive="true"/>
>    <conf name="test"      extends="runtime" transitive="true"/>
> The error occurs when resolving the transitive test conf. 
> Another factor that may or not be relevant is that none of our resolvers have 
> a version in the pattern.

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

Reply via email to