Springdoc 可与 war 配合使用,但嵌入耳朵后无法启动(Wildfly31 + JDK17)

问题描述 投票:0回答:1

我使用的是 spring-core 6.1.5,springdoc-openapi-starter-webmvc-ui 2.5.0。当我将应用程序打包为 war 并部署到在 JDK17 上运行的 Wildfly31 时,它运行良好,并且我能够访问 api-docs 和 swagger-ui.html。但是,当我打包为ear时,它无法启动。两个包都具有完全相同的类路径,只是 war 的依赖项位于 /lib 文件夹中,而 Ear 的依赖项位于 Ear 中,且 war 清单中的 jar 包相同。这个错误很出乎意料:

Caused by: java.lang.NoClassDefFoundError: Failed to link org/springframework/web/servlet/support/AbstractDispatcherServletInitializer (Module "deployment.springdocweb-module-7.0.0-SNAPSHOT.ear.spring-webmvc-6.1.5.jar" from Service Module Loader): org/springframework/web/context/AbstractContextLoaderInitializer
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1017)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1095)
    at org.jboss.modules.ModuleClassLoader.doDefineOrLoadClass(ModuleClassLoader.java:351)
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:482)
    at org.jboss.modules.ModuleClassLoader.loadClassLocal(ModuleClassLoader.java:276)
    at org.jboss.modules.ModuleClassLoader$1.loadClassLocal(ModuleClassLoader.java:79)
    at org.jboss.modules.Module.loadModuleClass(Module.java:765)
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:192)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:410)
    at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398)
    at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:116)
    at [email protected]//org.wildfly.extension.undertow.deployment.ServletContainerInitializerDeploymentProcessor.loadClassInfoSet(ServletContainerInitializerDeploymentProcessor.java:277)
    at [email protected]//org.wildfly.extension.undertow.deployment.ServletContainerInitializerDeploymentProcessor.deploy(ServletContainerInitializerDeploymentProcessor.java:179)
    at [email protected]//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:172)
    ... 8 more

我正在尝试将之前使用 Springfox 的 REST 模块升级到 Springdoc,以便我可以使用 Jakarta API 在 JDK17 上运行我的应用程序。我能够让我的示例应用程序在 Springboot 和 War 上运行,但只是不听。

spring swagger-ui ear springdoc
1个回答
0
投票

我通过将所有依赖项放置在ear文件的/lib文件夹中而不是根目录中解决了这个问题。看来添加 springdoc-openapi-starter-webmvc-ui.jar 后,自动配置正在 /lib 中查找 jar。

© www.soinside.com 2019 - 2024. All rights reserved.