Search code examples
eclipsemavendependencies

What is causing the java.lang.ClassNotFoundException in Maven dependencies for jakarta.ws.rs.ext.RuntimeDelegate?


I've encountered a problem with my Maven dependencies and am unsure what more I can do. The exception I get is: Provider for jakarta.ws.rs.ext.RuntimeDelegate cannot be found.

The funny this is that RuntimeDelegate is in my jersey-common jar (image provided) but I still keep on getting the same exception.

Visible in the file system

org.gitlab4j.api.GitLabApiException: java.lang.ClassNotFoundException: Provider for jakarta.ws.rs.ext.RuntimeDelegate cannot be found
    at org.gitlab4j.api.AbstractApi.handle(AbstractApi.java:700)
    at org.gitlab4j.api.AbstractApi.get(AbstractApi.java:216)
    at org.gitlab4j.api.Pager.<init>(Pager.java:92)
    at org.gitlab4j.api.ProjectApi.getProjects(ProjectApi.java:168)
    at org.gitlab4j.api.ProjectApi.getProjects(ProjectApi.java:140)
    at org.eclipse.fordiac.ide.gitlab.management.GitLabDownloadManager.filterData(GitLabDownloadManager.java:81)
    at org.eclipse.fordiac.ide.gitlab.management.GitLabDownloadManager.connectToGitLab(GitLabDownloadManager.java:73)
    at org.eclipse.fordiac.ide.gitlab.wizard.GitLabImportWizardPage.connect(GitLabImportWizardPage.java:64)
    at org.eclipse.fordiac.ide.gitlab.wizard.GitLabImportWizardPage.setPageComplete(GitLabImportWizardPage.java:58)
    at org.eclipse.fordiac.ide.gitlab.wizard.GitLabImportWizardPage$1.mouseDown(GitLabImportWizardPage.java:102)
    at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:196)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4256)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4054)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3642)
    at org.eclipse.jface.window.Window.runEventLoop(Window.java:823)
    at org.eclipse.jface.window.Window.open(Window.java:799)
    at org.eclipse.ui.internal.handlers.WizardHandler$Import.executeHandler(WizardHandler.java:153)
    at org.eclipse.ui.internal.handlers.WizardHandler.execute(WizardHandler.java:283)
    at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:283)
    at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:97)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base/java.lang.reflect.Method.invoke(Method.java:578)
    at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:317)
    at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:251)
    at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:173)
    at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:156)
    at org.eclipse.core.commands.Command.executeWithChecks(Command.java:488)
    at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:485)
    at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213)
    at org.eclipse.ui.internal.handlers.LegacyHandlerService.executeCommand(LegacyHandlerService.java:389)
    at org.eclipse.ui.internal.actions.CommandAction.runWithEvent(CommandAction.java:142)
    at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:580)
    at org.eclipse.jface.action.ActionContributionItem.lambda$4(ActionContributionItem.java:414)
    at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
    at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4256)
    at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
    at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4054)
    at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3642)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
    at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
    at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
    at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:643)
    at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
    at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:550)
    at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:171)
    at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base/java.lang.reflect.Method.invoke(Method.java:578)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1467)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1440)
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: Provider for jakarta.ws.rs.ext.RuntimeDelegate cannot be found
    at jakarta.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:118)
    at jakarta.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:88)
    at jakarta.ws.rs.core.UriBuilder.newInstance(UriBuilder.java:69)
    at jakarta.ws.rs.core.UriBuilder.fromUri(UriBuilder.java:91)
    at org.glassfish.jersey.client.JerseyWebTarget.<init>(JerseyWebTarget.java:50)
    at org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:274)
    at org.glassfish.jersey.client.JerseyClient.target(JerseyClient.java:56)
    at org.gitlab4j.api.GitLabApiClient.invocation(GitLabApiClient.java:828)
    at org.gitlab4j.api.GitLabApiClient.invocation(GitLabApiClient.java:801)
    at org.gitlab4j.api.GitLabApiClient.get(GitLabApiClient.java:416)
    at org.gitlab4j.api.GitLabApiClient.get(GitLabApiClient.java:404)
    at org.gitlab4j.api.AbstractApi.get(AbstractApi.java:214)
    ... 59 more
Caused by: java.lang.ClassNotFoundException: Provider for jakarta.ws.rs.ext.RuntimeDelegate cannot be found
    at jakarta.ws.rs.ext.FactoryFinder.find(FactoryFinder.java:163)
    at jakarta.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:103)
    ... 70 more

And these are my dependecies:

<dependencies>
<dependency>
    <groupId>org.gitlab4j</groupId>
    <artifactId>gitlab4j-api</artifactId>
    <version>6.0.0-rc.1</version>
    <type>jar</type>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>3.1.2</version>
    <type>jar</type>
</dependency>
<dependency>
        <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-common</artifactId>
        <version>3.1.2</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.inject</groupId>
    <artifactId>jersey-hk2</artifactId>
    <version>3.1.2</version>
    <type>jar</type>
</dependency>
<dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-client</artifactId>
        <version>3.1.2</version>
</dependency>
<dependency>
        <groupId>jakarta.xml.bind</groupId>
        <artifactId>jakarta.xml.bind-api</artifactId>
        <version>3.0.1</version>
</dependency>
<dependency>
        <groupId>jakarta.ws.rs</groupId>
        <artifactId>jakarta.ws.rs-api</artifactId>
        <version>3.1.0</version>
</dependency>
</dependencies>

I've seen a couple of possible solutions by adding additional dependencies, but even after adding them I've had no luck. I've also tried changing the versions of the dependencies but to no awail. Am I missing something?


Solution

  • I had the same problem recently and adding the dependency jersey-common with version higher than 3.0.0 fixed this:

                <dependency>
                    <groupId>org.glassfish.jersey.core</groupId>
                    <artifactId>jersey-common</artifactId>
                    <version>3.1.2</version>
                </dependency>
    

    If the issue still persist, I'd check whether the META-INF files aren't overwritten by something else, when for example using maven-shade-plugin or similar:

    • jersey-common-3.1.2.jar!/META-INF/services/jakarta.ws.rs.ext.RuntimeDelegate should contain org.glassfish.jersey.internal.RuntimeDelegateImpl
    • You can check whether there is conflicting implementation in your classpath by putting a breakpoint at jakarta.ws.rs.ext.RuntimeDelegate#findDelegate