Re: Duplicate class definition

Jeroen Frijters <[email protected]> Sun, 15 Nov 2015 08:45:48 +0000
Newsgroups gmane.comp.java.ikvm.devel
Message-ID <[email protected]>
Hi,

While working on the fix I found an easy workaround. Use the "-classloader:ikvm.runtime.AssemblyClassLoader" ikvmc option when compiling app.dll and core.dll.

Regards,
Jeroen

> -----Original Message-----
> From: Yves Langisch [mailto:[email protected]]
> Sent: Saturday, November 14, 2015 12:25
> To: Jeroen Frijters <[email protected]>
> Cc: ikvm-developers <[email protected]>
> Subject: Re: [Ikvm-developers] Duplicate class definition
> 
> Thanks Jeroen.
> 
> What do you mean by 'restructure your ikvmc compilation to make the
> class compile statically'?
> 
> Best,
> Yves
> 
> > On 13 Nov 2015, at 21:43 , Jeroen Frijters <[email protected]> wrote:
> >
> > Hi,
> >
> > This looks like an IKVM bug. I think there is a race condition in the
> class loader for this specific scenario (dynamically loading a class
> that ikvmc was unable to compile statically).
> >
> > I'll fix this, but in the mean time you can try to restructure your
> ikvmc compilation to make the class compile statically, or add some code
> to force the class to be loaded predictably.
> >
> > Thanks for reporting this.
> >
> > Regards,
> > Jeroen
> > ________________________________________
> > From: Yves Langisch <[email protected]>
> > Sent: Friday, November 13, 2015 3:20 PM
> > To: ikvm-developers
> > Subject: [Ikvm-developers] Duplicate class definition
> >
> > Hi there,
> >
> > Sometimes during authentication in my application I get the following
> exception:
> >
> > Caused by: java.util.concurrent.ExecutionException:
> java.lang.LinkageError: duplicate class definition:
> com.jcraft.jsch.agentproxy.connector.PageantConnector$User32
> >        at java.util.concurrent.FutureTask.report(FutureTask.java:122)
> >        at java.util.concurrent.FutureTask.get(FutureTask.java:192)
> >        ...
> > Caused by: java.lang.LinkageError: duplicate class definition:
> com.jcraft.jsch.agentproxy.connector.PageantConnector$User32
> >        at Java_java_lang_ClassLoader.defineClass1(Unknown Source)
> >        at IKVM.Internal.AssemblyClassLoader.DefineDynamic(Unknown
> Source)
> >        at IKVM.Internal.AssemblyClassLoader.LoadDynamic(Unknown
> Source)
> >        at IKVM.Internal.AssemblyClassLoader.LoadClassImpl(Unknown
> Source)
> >        at IKVM.Internal.ClassLoaderWrapper.LoadClass(Unknown Source)
> >        at IKVM.Runtime.ByteCodeHelper.LoadTypeWrapper(Unknown Source)
> >        at
> IKVM.Runtime.ByteCodeHelper.DynamicLoadMethodHandleImpl(Unknown Source)
> >        at
> IKVM.Runtime.ByteCodeHelper.DynamicBinderMemberLookup(Unknown Source)
> >        at
> com.jcraft.jsch.agentproxy.connector.PageantConnector.<init>(PageantConn
> ector.java:57)
> >        ...
> >
> > Background:
> >
> > * two relevant DLLs (app.dll, core.ll)
> > * core.dll is an IKVM converted library containing many 3rd party Java
> > jars
> > * app.dll is converted with /reference:core.dll and contains most of
> > the jars in core.dll already (and some more) -> conversion leads to
> > duplicate class warnings
> >
> > As far as I can see there are no duplicate classes in both DLLs.
> Referring to the stack trace, PageantConnector is in core.dll, the
> User32 interface in app.dll, if this makes any difference.
> >
> > Any ideas? Thanks!
> >
> > -
> > Yves
> >
> > ----------------------------------------------------------------------
> > -------- _______________________________________________
> > Ikvm-developers mailing list
> > [email protected]
> > https://lists.sourceforge.net/lists/listinfo/ikvm-developers


------------------------------------------------------------------------------