首页 > 解决方案 > 在Spring mvc上的cofiger swagger之后无法在jboss上部署war文件

问题描述

我正在开发部署在 jboss 应用程序服务器上的 spring mvc 项目。我要在这个项目上配置 swagger。在 config swagger 之前,它部署在 jboss 服务器上。但是在配置招摇部署失败后,指示以下错误

WFLYCTL0080: Failed services" => {"jboss.undertow.deployment.default-server.default-host./api" => "java.lang.RuntimeException: java.lang.IllegalStateException: Cannot load configuration class: com.ech.api.configuration.SpringFoxConfig
    Caused by: java.lang.RuntimeException: java.lang.IllegalStateException: Cannot load configuration class: com.ech.api.configuration.SpringFoxConfig
    Caused by: java.lang.IllegalStateException: Cannot load configuration class: com.ech.api.configuration.SpringFoxConfig
    Caused by: java.lang.NoClassDefFoundError: springfox/documentation/spring/web/plugins/Docket
    Caused by: java.lang.ClassNotFoundException: springfox.documentation.spring.web.plugins.Docket from [Module \"deployment.api.war\" from Service Module Loader]"},
  "WFLYCTL0288: One or more services were unable to start due to one or more indirect dependencies not being available." => {
    "Services that were unable to start:" => ["jboss.deployment.unit.\"api.war\".deploymentCompleteService"],
    "Services that may be the cause:" => [
      "jboss.iiop-openjdk.poa-service.rootpoa",
      "jboss.txn.service.remote",
      "jboss.xts.handlers",
      "org.wildfly.clustering.cache.default-service-provider-registry.ejb",
      "org.wildfly.clustering.cache.default-service-provider-registry.web",
      "org.wildfly.clustering.cache.group.ejb.passivation",
      "org.wildfly.clustering.cache.group.hibernate.entity",
      "org.wildfly.clustering.cache.group.hibernate.local-query",
      "org.wildfly.clustering.cache.group.hibernate.timestamps",
      "org.wildfly.clustering.cache.group.server.client-mappings",
      "org.wildfly.clustering.cache.group.server.default",
      "org.wildfly.clustering.cache.group.web.client-mappings",
      "org.wildfly.clustering.cache.group.web.passivation",
      "org.wildfly.clustering.cache.registry.ejb.passivation",
      "org.wildfly.clustering.cache.registry.server.default",
      "org.wildfly.clustering.cache.registry.web.passivation",
      "org.wildfly.clustering.cache.registry-entry.ejb.passivation",
      "org.wildfly.clustering.cache.registry-entry.hibernate.entity",
      "org.wildfly.clustering.cache.registry-entry.hibernate.local-query",
      "org.wildfly.clustering.cache.registry-entry.hibernate.timestamps",
      "org.wildfly.clustering.cache.registry-entry.server.client-mappings",
      "org.wildfly.clustering.cache.registry-entry.server.default",
      "org.wildfly.clustering.cache.registry-entry.web.client-mappings",
      "org.wildfly.clustering.cache.registry-entry.web.passivation",
      "org.wildfly.clustering.cache.registry-factory.ejb.passivation",
      "org.wildfly.clustering.cache.registry-factory.hibernate.entity",
      "org.wildfly.clustering.cache.registry-factory.hibernate.local-query",
      "org.wildfly.clustering.cache.registry-factory.hibernate.timestamps",
      "org.wildfly.clustering.cache.registry-factory.server.client-mappings",
      "org.wildfly.clustering.cache.registry-factory.server.default",
      "org.wildfly.clustering.cache.registry-factory.web.client-mappings",
      "org.wildfly.clustering.cache.registry-factory.web.passivation",
      "org.wildfly.clustering.cache.service-provider-registry.ejb.client-mappings",
      "org.wildfly.clustering.cache.service-provider-registry.ejb.passivation",
      "org.wildfly.clustering.cache.service-provider-registry.hibernate.entity",
      "org.wildfly.clustering.cache.service-provider-registry.hibernate.local-query",
      "org.wildfly.clustering.cache.service-provider-registry.hibernate.timestamps",
      "org.wildfly.clustering.cache.service-provider-registry.server.client-mappings",
      "org.wildfly.clustering.cache.service-provider-registry.server.default",
      "org.wildfly.clustering.cache.service-provider-registry.web.client-mappings",
      "org.wildfly.clustering.cache.service-provider-registry.web.default-server",
      "org.wildfly.clustering.cache.service-provider-registry.web.passivation",
      "org.wildfly.clustering.command-dispatcher-factory.ejb",
      "org.wildfly.clustering.command-dispatcher-factory.hibernate",
      "org.wildfly.clustering.command-dispatcher-factory.server",
      "org.wildfly.clustering.group.hibernate",
      "org.wildfly.clustering.group.server",
      "org.wildfly.clustering.infinispan.cache.ejb.passivation",
      "org.wildfly.clustering.infinispan.cache.hibernate.entity",
      "org.wildfly.clustering.infinispan.cache.hibernate.local-query",
      "org.wildfly.clustering.infinispan.cache.hibernate.timestamps",
      "org.wildfly.clustering.infinispan.cache.server.client-mappings",
      "org.wildfly.clustering.infinispan.cache.server.default",
      "org.wildfly.clustering.infinispan.cache.store.hibernate.entity",
      "org.wildfly.clustering.infinispan.cache.store.hibernate.local-query",
      "org.wildfly.clustering.infinispan.cache.store.hibernate.timestamps",
      "org.wildfly.clustering.infinispan.cache.store.server.default",
      "org.wildfly.clustering.infinispan.cache.web.client-mappings",
      "org.wildfly.clustering.infinispan.cache.web.passivation",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.entity",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.entity.expiration",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.entity.locking",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.entity.memory",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.entity.transaction",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.local-query",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.local-query.expiration",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.local-query.locking",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.local-query.memory",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.local-query.transaction",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.timestamps",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.timestamps.expiration",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.timestamps.locking",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.timestamps.memory",
      "org.wildfly.clustering.infinispan.cache-configuration.hibernate.timestamps.transaction",
      "org.wildfly.clustering.infinispan.cache-configuration.server.client-mappings",
      "org.wildfly.clustering.infinispan.cache-configuration.server.default",
      "org.wildfly.clustering.infinispan.cache-configuration.server.default.expiration",
      "org.wildfly.clustering.infinispan.cache-configuration.server.default.locking",
      "org.wildfly.clustering.infinispan.cache-configuration.server.default.memory",
      "org.wildfly.clustering.infinispan.cache-configuration.server.default.transaction",
      "org.wildfly.clustering.infinispan.cache-configuration.web.client-mappings",
      "org.wildfly.clustering.infinispan.cache-container.hibernate",
      "org.wildfly.clustering.infinispan.cache-container.server",
      "org.wildfly.clustering.infinispan.cache-container-configuration.hibernate",
      "org.wildfly.clustering.infinispan.cache-container-configuration.hibernate.transport",
      "org.wildfly.clustering.infinispan.cache-container-configuration.server",
      "org.wildfly.clustering.infinispan.cache-container-configuration.server.transport",
      "org.wildfly.clustering.infinispan.default-cache.ejb",
      "org.wildfly.clustering.infinispan.default-cache.web",
      "org.wildfly.clustering.infinispan.default-cache-configuration.server"
    ]
  }
}

我的 swagerConfigfile 如下

@EnableWebMvc
public class SwaggerConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");

        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

Springfox 配置文件如下

@Configuration
@EnableSwagger2
public class SpringFoxConfig {
    private static final ApiInfo DEFAULT_API_INFO = null; //Swagger info

    @Bean
    public Docket api()
    {
        return new Docket(DocumentationType.SWAGGER_2)
                .forCodeGeneration(Boolean.TRUE)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.ech.api.controller"))
                .paths(PathSelectors.any())
                .build();

    }


}

我已将以下依赖项添加到 pom

<dependencies>
     <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.6.1</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.6.1</version>
        </dependency>
</dependencies>

春季版 3.2.10.RELEASE

标签: javamavenspring-mvcjbossswagger-ui

解决方案


尝试将此配置与swagger 版本 2.7.0一起使用

@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport {
    @Bean
    public Docket productApi() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()                 .apis(RequestHandlerSelectors.basePackage("com.ech.api.controller"))
                .paths(PathSelectors.any())
                .build();
             
    }
  @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

推荐阅读