Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [tycho-user] Help debug classloader conflict loading plugin in standalone instance (not in launch config instance)?

Hi David,

I was primarily recommending looking at how orbit does the build so
you could replicate.

As for 4.5.1, the runtime is in orbit, just not released yet.
https://git.eclipse.org/c/orbit/orbit-recipes.git/tree/antlr/org.antlr.runtime_4.5.1

In the meantime, you can get the repo from
https://hudson.eclipse.org/orbit/job/orbit-recipes/lastSuccessfulBuild/artifact/releng/repository/target/repository/plugins/

Note that it is a little lucky that the version of a thirdparty jar is
available in Orbit. Orbit exists to supply Eclipse projects with
third-party jars. As each third party dependency re-published by
Eclipse has to be IP reviewed, you will only find jars that have gone
through that process because an Eclipse project needs them.

Jonah
~~~
Jonah Graham
Kichwa Coders Ltd.
www.kichwacoders.com


On 22 April 2016 at 21:39, David M. Karr <davidmichaelkarr@xxxxxxxxx> wrote:
> On 04/22/2016 01:18 PM, Jonah Graham wrote:
>
> Hi David,
>
> For Timothy's step 1 you might also want to look at eclipse orbit and how it
> works. In addition to examining the build process it uses to create bundles,
> it also has antlr (among many others) ready for consuming.
>
> http://download.eclipse.org/tools/orbit/downloads/drops/R20160221192158/
>
> In case you are wondering, the bundles and versions in orbit are ip clean
> jars approved for use on other eclipse projects.
>
>
> Yeah, I investigated that.  The newest Antlr jar in Orbit is 4.3.0, and my
> project requires something newer than that.  I was using 4.5.1, and a class
> my app is using isn't available in 4.3.0.  I just posted a note on the Orbit
> forum asking whether it's possible to request a newer version being
> available.
>
> Even if I could find 4.5.1 on Orbit or some other p2 repo, I really have no
> idea whether the way I'm getting the Antlr jar has anything to do with my
> problem.
>
>
> Jonah
>
> On Friday, 22 April 2016, Timothy Vogel <tvogel@xxxxxxx> wrote:
>>
>> David,
>>   What I do in a similar situation is get those artifacts into the target
>> platform and then they are first class citizens and can be included in
>> features and dependencies directly.
>>
>> Create a new target with just the non-repo artifacts
>>
>> If the artifacts are already OSGI enabled you can include directly
>> For non-OSGI jars, you need to make them into a jar by following one of
>> the tutorials on it (search on Lars Vogel's site).
>>
>> Make this new target active
>> Create a feature that includes those artifacts
>> Export the feature as a p2 site (Feature->Overview tab->Export
>> Wizard->Options tab->Generate p2 repository)
>> switch back to your project's target file
>> Include the p2 site created in #3 as a local site in this target.
>> Make the target active.
>> You should now be able to find the non-repo artifacts like any other.
>>
>>
>> Hope This Helps,
>> Timothy
>>
>>
>>
>>
>> > To: tycho-user@xxxxxxxxxxx
>> > From: davidmichaelkarr@xxxxxxxxx
>> > Date: Fri, 22 Apr 2016 10:49:31 -0700
>> > Subject: Re: [tycho-user] Help debug classloader conflict loading plugin
>> > in standalone instance (not in launch config instance)?
>> >
>> > On 04/20/2016 12:12 PM, David M. Karr wrote:
>> > > I'm working on an eclipse plugin codebase that uses Tycho to build
>> > > itself. The application requires several artifacts that aren't
>> > > available in a p2 repo. To resolve this, I created one plugin project
>> > > whose only purpose is to use the "copy-dependencies" goal from the
>> > > "maven-dependency-plugin" to specify the artifacts that are needed and
>> > > make them available in the "Bundle-ClassPath" property of the same
>> > > plugin. I then set other plugins that require these libraries to
>> > > depend on this plugin.
>> > >
>> > > This had been working fine, although there was one point where I saw
>> > > the following error after installing the plugin from a local update
>> > > site constructed from the build:
>> > >
>> > > java.lang.LinkageError: org/antlr/v4/runtime/TokenStream
>> > >
>> > > After some fiddling, this went away, although I wasn't certain exactly
>> > > what I did to make it go away.
>> > >
>> > > I'm aware of the fact that this indicates a conflict with loading a
>> > > class from multiple classloaders.
>> > >
>> > > Today, this error came back.
>> > >
>> > > Curiously, if I instead test this with an "Eclipse Application" run
>> > > configuration, loading all plugins in the workspace, I don't see the
>> > > error.
>> > >
>> > > I changed the command line of the Eclipse instance (not the one from
>> > > the launch configuration) to add "-verbose:class" to see where this is
>> > > loaded from. I extracted the following relevant lines from the output:
>> > > ----------------------
>> > > [Loaded org.antlr.v4.runtime.TokenStream from
>> > >
>> > > file:/home/opnfv/frameworks/eclipse-neon/java-mars/eclipse/../../../../.p2/pool/plugins/net.sf.eclipsecs.checkstyle_6.16.0.201603042321/checkstyle-6.16.1-all.jar]
>> > > [Loaded org.antlr.v4.runtime.TokenStream from
>> > >
>> > > file:/home/opnfv/frameworks/eclipse-neon/java-mars/eclipse/configuration/org.eclipse.osgi/605/0/.cp/libs/antlr4-runtime-4.5.1.jar]
>> > > java.lang.LinkageError: loader constraint violation: loader (instance
>> > > of org/eclipse/osgi/internal/loader/EquinoxClassLoader) previously
>> > > initiated loading for a different type with name
>> > > "org/antlr/v4/runtime/TokenStream"
>> > > at java.lang.ClassLoader.defineClass1(Native Method)
>> > > at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
>> > > at
>> > >
>> > > org.eclipse.osgi.internal.loader.ModuleClassLoader.defineClass(ModuleClassLoader.java:272)[Loaded
>> > > com.google.common.collect.Collections2$FilteredCollection from
>> > >
>> > > file:/home/opnfv/frameworks/eclipse-neon/java-mars/eclipse/../../../../.p2/pool/plugins/com.google.guava_15.0.0.v201403281430.jar]
>> > >
>> > > at
>> > >
>> > > org.eclipse.osgi.internal.loader.classpath.ClasspathManager.defineClass(ClasspathManager.java:632)
>> > > at
>> > >
>> > > org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findClassImpl(ClasspathManager.java:588)
>> > > at
>> > >
>> > > org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClassImpl(ClasspathManager.java:540)
>> > > at
>> > >
>> > > org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalClass(ClasspathManager.java:527)
>> > > at
>> > >
>> > > org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalClass(ModuleClassLoader.java:324)
>> > > at
>> > >
>> > > org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:327)
>> > > at
>> > >
>> > > org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:402)
>> > > at
>> > >
>> > > org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:352)
>> > > at
>> > >
>> > > org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:344)
>> > > at
>> > >
>> > > org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:160)
>> > > at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>> > > at org.antlr.v4.runtime.Parser.setInputStream(Parser.java:530)
>> > > -----------------
>> > >
>> > > I could use some ideas or suggestions for troubleshooting and fixing
>> > > this.
>> > If it matters, I'm adding more details in a SO posting, at
>> >
>> > http://stackoverflow.com/questions/36798891/loader-constraint-violation-loading-antlr-jar-in-eclipse-plugin-built-with-tycho
>> > .
>> > _______________________________________________
>> > tycho-user mailing list
>> > tycho-user@xxxxxxxxxxx
>> > To change your delivery options, retrieve your password, or unsubscribe
>> > from this list, visit
>> > https://dev.eclipse.org/mailman/listinfo/tycho-user
>
>
>
> --
> ~~~
> Jonah Graham
> Kichwa Coders Ltd.
> www.kichwacoders.com
>
>
>
> _______________________________________________
> tycho-user mailing list
> tycho-user@xxxxxxxxxxx
> To change your delivery options, retrieve your password, or unsubscribe from
> this list, visit
> https://dev.eclipse.org/mailman/listinfo/tycho-user
>
>
>
> _______________________________________________
> tycho-user mailing list
> tycho-user@xxxxxxxxxxx
> To change your delivery options, retrieve your password, or unsubscribe from
> this list, visit
> https://dev.eclipse.org/mailman/listinfo/tycho-user


Back to the top