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

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

Back to the top