springjakarta-migration

Spring 6 project still tries to load javax


Moving on from Question 77947044, I now have the Spring 6 project throwing NoClassDefFoundError exceptions regarding javax:

11:51:28,760 WARN  [org.jboss.modules.define] (MSC service thread 1-2) Failed to define class org.springframework.web.servlet.tags.form.AbstractHtmlElementTag in Module "deployment.{my WAR name}.war" from Service Module Loader: java.lang.NoClassDefFoundError: Failed to link org/springframework/web/servlet/tags/form/AbstractHtmlElementTag (Module "deployment.{my WAR name}.war" from Service Module Loader): javax/servlet/jsp/tagext/DynamicAttributes
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1090)
    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 java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1090)
    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 java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:467)
    at org.jboss.as.ee@30.0.0.Final//org.jboss.as.ee.utils.ClassLoadingUtils.loadClass(ClassLoadingUtils.java:26)
    at org.jboss.as.ee@30.0.0.Final//org.jboss.as.ee.utils.ClassLoadingUtils.loadClass(ClassLoadingUtils.java:19)
    at org.jboss.as.ee@30.0.0.Final//org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.processComponentConfig(InterceptorAnnotationProcessor.java:67)
    at org.jboss.as.ee@30.0.0.Final//org.jboss.as.ee.component.deployers.InterceptorAnnotationProcessor.deploy(InterceptorAnnotationProcessor.java:60)
    at org.jboss.as.server@22.0.1.Final//org.jboss.as.server.deployment.DeploymentUnitPhaseService.start(DeploymentUnitPhaseService.java:171)
    at org.jboss.msc@1.5.2.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1617)
    at org.jboss.msc@1.5.2.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1580)
    at org.jboss.msc@1.5.2.Final//org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1438)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at java.base/java.lang.Thread.run(Thread.java:833)
11:51:29,277 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-1) MSC000001: Failed to start service jboss.deployment.unit."{my WAR name}.war".undertow-deployment.UndertowDeploymentInfoService: org.jboss.msc.service.StartException in service jboss.deployment.unit."{my WAR name}.war".undertow-deployment.UndertowDeploymentInfoService: Failed to start service
    at org.jboss.msc@1.5.2.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1609)
    at org.jboss.msc@1.5.2.Final//org.jboss.msc.service.ServiceControllerImpl$ControllerTask.run(ServiceControllerImpl.java:1438)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1363)
    at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.NoClassDefFoundError: Failed to link org/springframework/web/servlet/DispatcherServlet (Module "deployment.{my WAR name}.war" from Service Module Loader): Failed to link org/springframework/web/servlet/FrameworkServlet (Module "deployment.{my WAR name}.war" from Service Module Loader): Failed to link org/springframework/web/servlet/HttpServletBean (Module "deployment.{my WAR name}.war" from Service Module Loader): javax/servlet/http/HttpServlet
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1090)
    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 java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1090)
    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 java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1012)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1090)
    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 org.wildfly.extension.undertow@30.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService.createServletConfig(UndertowDeploymentInfoService.java:634)
    at org.wildfly.extension.undertow@30.0.0.Final//org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService.start(UndertowDeploymentInfoService.java:270)
    at org.jboss.msc@1.5.2.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1617)
    at org.jboss.msc@1.5.2.Final//org.jboss.msc.service.ServiceControllerImpl$StartTask.execute(ServiceControllerImpl.java:1580)
    ... 6 more

This is despite my best effort to get rid of every "javax" reference in favour of "jakarta", and my Spring library being up-to-date (6.1.3).

Appreciated if there's, say, a checklist for me to review my application.

EDIT 2024-02-26:

Regarding comment from @BalusC, here are some tools and technologies I am utilizing:

  1. IDE = Eclipse 2023-12
  2. JDK = 17
  3. Spring = 6.1.3; Spring-security = 6.2.1; Spring-boot = 3.2.2
  4. Maven compiler plugin 3.11.0; Maven WAR plugin = 3.4.0; Maven failsafe plugin 3.2.2

Also, I found that if I wrap it in EAR project, no such error occurs despite having identical library settings (We have a parent "configuration" project to manage all library import, and the web app project doesn't contain "version" in the pom.xml). Rather, it simply deploys without error but the webapp doesn't run.

P.S. If I build a WAR file from the web app project, and deploy it onto a remote Wildfly 30.0.0 server, it also deploys without error, but no response if I try to access the web app.


Solution

  • Sorry I have committed a very trivial mistake.

    It turns out I simply deployed a wrong application which I no longer use.

    The correct application turns out having no error on deployment, simply that it doesn't run as expected. I will post another question if necessary.

    Since this question is caused by a trivial mistake I wish to know if this question qualifies deletion. Sorry for the inconvenience caused.