是什么导致了jakarta.ws.rs.ext.RuntimeDelegate的Maven依赖项中的java.lang.ClassNotFoundException?

1tuwyuhd  于 2023-06-05  发布在  Maven
关注(0)|答案(1)|浏览(586)

我遇到了一个与我的Maven依赖关系的问题,不确定我还能做些什么。我得到的例外是:Provider for jakarta.ws.rs.ext.RuntimeDelegate cannot be found
有趣的是,RuntimeDelegate在我的jersey-common jar(提供的图片)中,但我仍然得到相同的异常。

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

这些是我的依靠:

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

通过添加额外的依赖项,我已经看到了一些可能的解决方案,但即使添加了它们,我也没有运气。我也试过改变依赖的版本,但没有意识到。我错过了什么吗?

nbysray5

nbysray51#

我最近遇到了同样的问题,添加了版本高于3.0.0的依赖项jersey-common解决了这个问题:

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

如果问题仍然存在,我会检查META-INF文件是否没有被其他东西覆盖,例如使用maven-shade-plugin或类似的东西:

  • jersey-common-3.1.2.jar!/META-INF/services/jakarta.ws.rs.ext.RuntimeDelegate应包含org.glassfish.jersey.internal.RuntimeDelegateImpl
  • 您可以通过在jakarta.ws.rs.ext.RuntimeDelegate#findDelegate处放置一个断点来检查类路径中是否存在冲突的实现

相关问题