El proyecto Springboot se compila y se inicia normalmente, pero el Tomcat integrado no se puede iniciar y se informa un error.
Verifique el registro de errores cuidadosamente: El motivo es: java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName( )Ljava/lang / String;
Como regla general, debería estar muy contento cuando vea NoSuchMethodError en el mensaje de excepción, porque este error generalmente es causado por un conflicto jar. Obtenga javax.servlet.Servlet-api según la información relevante del archivo de clase ServletContext en el paquete Servlet-api. Paquete servlet-api, verifique la versión del paquete servlet-api a través de dependencias
Puede ver que la referencia de unión a la que se hace referencia en el paquete jcifs depende del paquete servlet-api, excluyendo las dependencias
En este momento, verifique la versión del paquete servlet-api a través de dependencias
En este momento, verifique a través de dependencias
En este momento, puede encontrar que la dependencia de servlet-api api ya no existe. Inicie el proyecto nuevamente y descubrió que el proyecto se inició normalmente y el problema se resolvió.
No existe el método getVirtualServerName() en la versión inferior 2.4 servlet-api.jar, pero existe este método en la versión superior del paquete servlet-api.jar (javax.servlet-api-3.1.0 .jar).
El tomcat-embed-core incrustado en Springboot entra en conflicto con la clase ServletContext en servlet-api.jar. Un proyecto springboot normal no necesita depender de servlet-api.jar. de lo contrario, el contenedor integrado no se puede iniciar normalmente
Cuando use spring-data-hadoop-hbase, también debe excluir la dependencia de servlet-api.jar; de lo contrario, no se iniciará correctamente.
.