【问题标题】:Setting mainClass in spring-boot-maven-plugin causes me to need to set the 'defaultServletName' property explicitly在 spring-boot-maven-plugin 中设置 mainClass 导致我需要明确设置“defaultServletName”属性
【发布时间】:2017-06-08 14:27:47
【问题描述】:

我的 springboot jar 运行良好,直到我将 newrelic-agent jar 添加到类路径中,现在我需要指定一个主类。这是有道理的,因为我现在在类路径中有几个带有静态 main args 方法的类。推荐的方法是将其添加到'spring-boot-maven-plugin'。所以我做了以下事情:

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <mainClass>com.ebates.rclon.Application</mainClass>
  </configuration>
  <executions>
    <execution>
     <goals>
        <goal>repackage</goal>
     </goals>
    </execution>
  </executions>
</plugin>

这样做后我得到:

java.lang.IllegalStateException:找不到用于提供静态内容的默认 servlet。请明确设置“defaultServletName”属性。

  • 为什么要指定主类中断 spring boots 自动配置?
  • 之前的 defaultServletName 是如何配置的?

【问题讨论】:

    标签: java maven spring-boot jar mainclass


    【解决方案1】:

    我认为经过一些研究和玩弄后,我对此有了更好的理解。

    • 添加 mainClass 并不是问题所在。 Spring自动配置与它无关,问题是由于类路径中有两个jar,引入了第二个main方法,spring boot在启动时不知道使用哪个。通过修复该问题还揭示了存在多个应用程序上下文。

    • 在 Spring MVC 中,有一个默认的 servlet 上下文,如果找不到其他上下文来提供静态内容,则使用该上下文。当您启用此功能时,您通常不会指定名称,但如果您的类路径中有多个候选上下文,则需要命名它。这是一个关于如何做到这一点的示例:

    @Configuration public class MVCConfig extends WebMvcConfigurerAdapter
    {
    
        @Override public void configureDefaultServletHandling(final 
                           DefaultServletHandlerConfigurer configurer)
        {
            configurer.enable("nameOfDefaultContextGoesHere");
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-22
      • 2015-04-18
      • 2020-08-21
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      相关资源
      最近更新 更多