Spring Boot Maven提供的范围包含在WAR中,但不包含在IDE运行时中

时间:2016-01-11 16:20:40

标签: java spring maven intellij-idea spring-boot

我花了整个周末试图弄清楚为什么一个简单的Spring Boot项目使用命令行,但不是通过我的IntelliJ 15.0.2 IDE并最终将其缩小到以下内容:

  1. 我使用的是嵌入式Tomcat
  2. 默认依赖关系如下:

    <dependencies>
      ...
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
      </dependency>
    </dependencies>
    
    1. Maven provided scope dependencies are included in the packaged JAR/WAR
    2. IntelliJ从运行时类路径中排除provided范围。
  3. 因此,命令行构建的WAR文件包含为嵌入式Tomcat提供的范围JAR,但是通过IntelliJ IDEA运行的实例不包含。

    以前有没有人碰过这个?

    解决问题的最佳方法是什么?

    我可以将scope更改为compile,但这感觉就像是黑客。这是唯一的解决办法吗?

1 个答案:

答案 0 :(得分:1)

我有同样的问题。我修正了我对范围的评论。

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <!--<scope>provided</scope>-->
</dependency>