Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using P2 Metadata mojo outside of a tycho build fails due to class space problems #785

Open
laeubi opened this issue Mar 17, 2022 · 0 comments

Comments

@laeubi
Copy link
Member

laeubi commented Mar 17, 2022

We recently saw a problem in https://git.eclipse.org/r/c/mylyn/org.eclipse.mylyn.docs/+/191739 and I also have the same problem in another build here: faktorips/faktorips.base#28

What happens is that the execution of the Mojo fails with:

Caused by: java.lang.ClassCastException: class org.eclipse.tycho.core.osgitools.DefaultReactorProject cannot be cast to class org.eclipse.tycho.ReactorProject (org.eclipse.tycho.core.osgitools.DefaultReactorProject is in unnamed module of loader org.codehaus.plexus.classworlds.realm.ClassRealm @dd2856e; org.eclipse.tycho.ReactorProject is in unnamed module of loader org.codehaus.plexus.classworlds.realm.ClassRealm @27187450)
    at org.eclipse.tycho.core.osgitools.DefaultReactorProject.adapt (DefaultReactorProject.java:63)
    at org.eclipse.tycho.osgi.configuration.MavenContextConfigurator.afterFrameworkStarted (MavenContextConfigurator.java:67)
    at org.eclipse.sisu.equinox.embedder.internal.DefaultEquinoxEmbedder.doStart (DefaultEquinoxEmbedder.java:179)
    at org.eclipse.sisu.equinox.embedder.internal.DefaultEquinoxEmbedder.start (DefaultEquinoxEmbedder.java:70)
    at org.eclipse.sisu.equinox.embedder.internal.DefaultEquinoxEmbedder.checkStarted (DefaultEquinoxEmbedder.java:297)
    at org.eclipse.sisu.equinox.embedder.internal.DefaultEquinoxEmbedder.getService (DefaultEquinoxEmbedder.java:273)
    at org.eclipse.sisu.equinox.embedder.internal.DefaultEquinoxEmbedder.getService (DefaultEquinoxEmbedder.java:268)
    at org.eclipse.tycho.plugins.p2.P2MetadataMojo.getService (P2MetadataMojo.java:136)
    at org.eclipse.tycho.plugins.p2.P2MetadataMojo.attachP2Metadata (P2MetadataMojo.java:171)
    at org.eclipse.tycho.plugins.p2.P2MetadataMojo.execute (P2MetadataMojo.java:131)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81)
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305)
    at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192)
    at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105)
    at org.apache.maven.cli.MavenCli.execute (MavenCli.java:957)
    at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:289)
    at org.apache.maven.cli.MavenCli.main (MavenCli.java:193)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke (Method.java:566)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347)

This is due to tycho is doing some setup already in the preparation phase of the build, and if not both projects share the same class space (e.g. extension versus project realm, OSGi versus maven and alike).

It seems we require something to separate things here in case of classloader isolation some thoughts about this:

  1. Make the generation of P2 metadata an independent step (see Create a p2-mavenplugin #711) that do not requires special tycho interaction, e.g. we could attatch the discovered units as a XML data that is later on loaded by tycho
  2. Tycho probably could, if it encounters a project without p2 metadata, simply generates this without the need for special mojos
  3. We probably find some way for the DefaultEquinoxEmbedder to be shared across class realms
  4. ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant