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)?

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.


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.

  1. Create a new target with just the non-repo artifacts
    1. If the artifacts are already OSGI enabled you can include directly
    2. 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).
  2. Make this new target active
  3. Create a feature that includes those artifacts
  4. Export the feature as a p2 site (Feature->Overview tab->Export Wizard->Options tab->Generate p2 repository)
  5. switch back to your project's target file
  6. Include the p2 site created in #3 as a local site in this target.
  7. Make the target active.
  8. 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


Back to the top