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,

Where do I create this new target file?  I currently have a project with a "eclipse-target-definition"  packaging type.
  The target file is created in the Eclipse IDE and can be put in any project.  I have a project specifically for targets.

What exactly do you mean by "non-repo"?  Do you mean these artifacts that I'm getting from a Maven repo and not a p2 repo?
  Yes the artifacts that are not in a p2 repo.

Does this mean that I have to store that generated p2 site in my project?  This is a binary file, right?  That is not conducive to an automated build, and my project's policies forbid this anyway.

  The p2 site is a combination of XML files that define the repo and the artifacts.  
  The p2 site is created once, outside of any automated build, and becomes just another repo for your build.  From my perspective it is no different than an Eclipse provided repo or a Maven one.  It can be located on a shared server for group builds.
  Not sure what to say about your projects build policies.

Sorry I don't have a better answer ... maybe someone who develops Tycho can provide a different solution.

Timothy



To: tycho-user@xxxxxxxxxxx
From: davidmichaelkarr@xxxxxxxxx
Date: Fri, 22 Apr 2016 13:34:14 -0700
Subject: Re: [tycho-user] Help debug classloader conflict loading plugin in standalone instance (not in launch config instance)?



On 04/22/2016 01:08 PM, Timothy Vogel 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
Where do I create this new target file?  I currently have a project with a "eclipse-target-definition"  packaging type.

What exactly do you mean by "non-repo"?  Do you mean these artifacts that I'm getting from a Maven repo and not a p2 repo?

    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).
  1. Make this new target active
  2. Create a feature that includes those artifacts
  3. Export the feature as a p2 site (Feature->Overview tab->Export Wizard->Options tab->Generate p2 repository)
  4. switch back to your project's target file
  5. Include the p2 site created in #3 as a local site in this target.
  6. Make the target active.
  7. You should now be able to find the non-repo artifacts like any other.


Does this mean that I have to store that generated p2 site in my project?  This is a binary file, right?  That is not conducive to an automated build, and my project's policies forbid this anyway.

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


_______________________________________________
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