Skip to content

org.eclipse.m2e.maven.runtime ships old jcl-over-slf4j-1.7.36.jar, breaking MWE2 workflow #2203

Description

@haubi

So I'm upgrading to Eclipse IDE 2026-06, and it turns out that the new Complete classpath for plug-in projects breaks some MWE2 workflows here running the Xtext Generator, when org.eclipse.mwe2.maven.runtime is a dependency of the bundle containing the Xtext file, and the selected Target Platform already uses SLF4J v2 in general.

To reproduce the issue, I have created some draft PR: ssi-schaefer/lcdsl#108,
for use via Oomph Setup on Github/Launch Config DSL project, requires to refresh Oomph Modular Target after fetching the PR:

  • With Eclipse IDE 2026-03, the MWE2 workflow on LcDsl.xtext works fine,
  • with Eclipse IDE 2026-06, the MWE2 workflow on LcDsl.xtext breaks (when not using the Temporary workaround)

The situation in more detail:

  • As of Eclipse IDE 2026-06, PDE calculates Complete classpath for plug-in projects, including all the transitive dependencies,
    unless the Temporary workaround is applied to restore previous behavior.
  • M2E Maven Runtime bundle, even in 2026-06 still, ships old jcl-over-slf4j-1.7.36.jar, which is for SLF4J v1,
    despite SLF4J v2 is used for quite some time already.
  • MWE2 workflow uses plain Java run configurations.

IMHO, I do see these general issues here:

  • M2E: Shipping embedded jars for something-over-slf4j is not a good idea in general.
  • MWE2: Plug-in Dependencies are designed for OSGi, using them in plain Java run configurations is questionable.

WDYT?

For reference, having org.eclipse.mwe2.maven.runtime bundle as dependency of the bundle containing the Xtext file, the MWE2 workflow fails with this console output:

0    [main] ERROR mf.mwe2.launch.runtime.Mwe2Launcher  - org/slf4j/impl/SimpleLoggerFactory
java.lang.NoClassDefFoundError: org/slf4j/impl/SimpleLoggerFactory
	at org.eclipse.m2e.slf4j2.provider.MavenSLF4JProvider.initialize(MavenSLF4JProvider.java:55)
	at org.slf4j.LoggerFactory.bind(LoggerFactory.java:201)
	at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:187)
	at org.slf4j.LoggerFactory.getProvider(LoggerFactory.java:511)
	at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:497)
	at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:446)
	at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
	at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
	at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:273)
	at org.eclipse.emf.mwe.core.lib.AbstractWorkflowComponent.<clinit>(AbstractWorkflowComponent.java:31)
	at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized0(Native Method)
	at java.base/jdk.internal.misc.Unsafe.ensureClassInitialized(Unsafe.java:1160)
	at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.ensureClassInitialized(MethodHandleAccessorFactory.java:301)
	at java.base/jdk.internal.reflect.MethodHandleAccessorFactory.newConstructorAccessor(MethodHandleAccessorFactory.java:104)
	at java.base/jdk.internal.reflect.ReflectionFactory.newConstructorAccessor(ReflectionFactory.java:200)
	at java.base/java.lang.reflect.Constructor.acquireConstructorAccessor(Constructor.java:549)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
	at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:486)
	at org.eclipse.emf.mwe2.language.factory.Mwe2ExecutionEngine.create(Mwe2ExecutionEngine.java:158)
	at org.eclipse.emf.mwe2.language.factory.Mwe2ExecutionEngine.inCase(Mwe2ExecutionEngine.java:107)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:303)
	at org.eclipse.emf.mwe2.language.factory.Mwe2ExecutionEngine.internalSwitch(Mwe2ExecutionEngine.java:69)
	at org.eclipse.emf.mwe2.language.factory.Mwe2ExecutionEngine.internalApplyAssignments(Mwe2ExecutionEngine.java:145)
	at org.eclipse.emf.mwe2.language.factory.Mwe2ExecutionEngine.inCase(Mwe2ExecutionEngine.java:117)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:303)
	at org.eclipse.emf.mwe2.language.factory.Mwe2ExecutionEngine.internalSwitch(Mwe2ExecutionEngine.java:69)
	at org.eclipse.emf.mwe2.language.factory.Mwe2ExecutionEngine.inCase(Mwe2ExecutionEngine.java:83)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.eclipse.xtext.util.PolymorphicDispatcher.invoke(PolymorphicDispatcher.java:303)
	at org.eclipse.emf.mwe2.language.factory.Mwe2ExecutionEngine.internalSwitch(Mwe2ExecutionEngine.java:69)
	at org.eclipse.emf.mwe2.language.factory.Mwe2ExecutionEngine.create(Mwe2ExecutionEngine.java:65)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:94)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:63)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Runner.run(Mwe2Runner.java:53)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.run(Mwe2Launcher.java:78)
	at org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher.main(Mwe2Launcher.java:36)
Caused by: java.lang.ClassNotFoundException: org.slf4j.impl.SimpleLoggerFactory
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
	... 41 more

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions