On 1/23/07, Loehr, Ruel <[EMAIL PROTECTED]> wrote:
That was indeed what it was. When I give them all the same loader ref, it works. I can then print out the classpath reference. Later on though, when I attempt to use that same classpathref it throws an error saying that it is unknown. I can't understand yet why it would disappear when I attempt to use it from a different target. What is the best practice here? To let ivy dynamically create the classpaths or to manually create them?
It depends on your requirements. If you use ivy:retrieve and then build your classpath manually, you can have a build very independent from Ivy. Once the retrieve step has been done, it doesn't rely on Ivy anymore, and thus it's pretty easy to get rid of Ivy for a build delivery for instance. With the cachepath task on the other hand you use directly jars from the cache and thus avoid a copy, but then heavily rely on Ivy for your classpath, making it harder to build or use your project without Ivy (in your IDE for instance). Xavier Thanks!
Ruel Loehr -----Original Message----- From: Steve Loughran [mailto:[EMAIL PROTECTED] Sent: Tuesday, January 23, 2007 5:47 AM To: [email protected] Subject: Re: classcast exception when attempting to use cachepath task Xavier Hanin wrote: > On 1/22/07, Loehr, Ruel <[EMAIL PROTECTED]> wrote: >> >> Hi. > > > Hi > > I'm having a problem using the cachepath task. I receive a class cast >> exception when I define it. I've researched the problem but cannot have >> not found a solution yet. > > > You're problem is pretty strange, but I would bet it's a classloader > problem. Indeed here is line 130: > ModuleDescriptor reference = (ModuleDescriptor) > getResolvedDescriptor(org, module, strict); > > And the CCE indicate that the class of the object is > DefaultModuleDescriptor, which implements ModuleDescriptor. So it's > presumably because the ModuleDescriptor interface has not been loaded with > the same classloader as the class DefaultModuleDescriptor. How do you load > Ivy in ant? Do you use a taskdef with a special classpath, or do you put > Ivy > in your ant lib directory? And do you call ant with some kind of recursive > feature, like subant or ant tasks? If it is the case try to do something > very simple (like a single build file with ivy.jar in ant lib directory > only) to see if the problem comes from here or not. And if you manage to > identify the problem, please add an bug in JIRA. > If you declare types and tasks in separatate <taskdef> and <typedef> calls, you should force both into the same classloader instance by setting loaderRef="some-shared-string" in both declarations. otherwise ant loads them into differenct classloaders, even if the classpath is identical
