zoukankan      html  css  js  c++  java
  • No Spring WebApplicationInitializer types detected on classpath

    情况:

    1.使用 Tomcat 8 Maven 插件

    2.使用 ServletContainerInitializer 模式配置 Spring

    配置好后发现只会加载 spring-web 配置的 WebApplicationInitializer 的子类,自己配置的 WebApplicationInitializer 子类不会加载,传入的 WebApplicationInitializer 类型只有spring 自己的

    查询无结果,最后换回 Tomcat 7 Maven 插件,问题解决

    Tomcat 8 Maven

    <pluginRepositories>
        <pluginRepository>
            <id>alfresco-public</id>
            <url>https://artifacts.alfresco.com/nexus/content/repositories/public/</url>
        </pluginRepository>
    </pluginRepositories>
    
    <packaging>war</packaging>
    
    <build>
        <plugins>
            <!-- 指定jdk -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
    
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat8-maven-plugin</artifactId>
                <version>3.0-r1756463</version>
                <configuration>
                    <port>80</port>
                    <path>/ssm</path>
                    <server>tomcat8</server>
                    <charset>UTF-8</charset>
                    <uriEncoding>UTF-8</uriEncoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

    Tomcat 7 Maven

    <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.2</version>
        <configuration>
            <!--<ignorePackaging>true</ignorePackaging>-->
            <port>80</port>
            <path>/ssm</path>
            <server>tomcat7</server>
            <charset>UTF-8</charset>
            <uriEncoding>UTF-8</uriEncoding>
        </configuration>
    </plugin>

    尝试自己配置 ServletContainerInitializer,不使用 Spring 配置的 ,发现 Tomcat 8 Maven 也可以正常执行

    附上 org.springframework.web.SpringServletContainerInitializer 源码,可以看到 WebApplicationInitializer 类型的集合为空

    @HandlesTypes(WebApplicationInitializer.class)
    public class SpringServletContainerInitializer implements ServletContainerInitializer {
        
        @Override
        public void onStartup(@Nullable Set<Class<?>> webAppInitializerClasses, ServletContext servletContext) throws ServletException {
    
            List<WebApplicationInitializer> initializers = new LinkedList<>();
    
            if (webAppInitializerClasses != null) {
                for (Class<?> waiClass : webAppInitializerClasses) {
                    if (!waiClass.isInterface() && !Modifier.isAbstract(waiClass.getModifiers()) && WebApplicationInitializer.class.isAssignableFrom(waiClass)) {
                        try {
                            initializers.add((WebApplicationInitializer) ReflectionUtils.accessibleConstructor(waiClass).newInstance());
                        } catch (Throwable ex) {
                            throw new ServletException("Failed to instantiate WebApplicationInitializer class", ex);
                        }
                    }
                }
            }
            
            if (initializers.isEmpty()) {
                servletContext.log("No Spring WebApplicationInitializer types detected on classpath");
                return;
            }
            
            servletContext.log(initializers.size() + " Spring WebApplicationInitializers detected on classpath");
            AnnotationAwareOrderComparator.sort(initializers);
            for (WebApplicationInitializer initializer : initializers) {
                initializer.onStartup(servletContext);
            }
        }
    }
  • 相关阅读:
    POJ3246
    .NetCore Docker一次记录
    asp.net利用SmtpClient发送邮件
    Assert类的静态方法
    ado.net 连接数据库
    虚拟目录
    web.config配置详细说明
    图片上传
    .NET操作Excel
    asp.net 数据绑定 -- 时间格式
  • 原文地址:https://www.cnblogs.com/jhxxb/p/10509662.html
Copyright © 2011-2022 走看看