编译和提供之间有什么区别

时间:2019-04-17 08:25:32

标签: maven spring-boot spring-mvc apache-tiles

当我将<scope>设置为provided时,我的应用程序无法正常工作。但是,当它编译时,它可以工作。您能解释一下两者之间的区别吗?

这是tileConfig类,用于设置路径。

@Configuration
public class TilesConfig {

    @Bean
    public ViewResolver viewResolver() {
        UrlBasedViewResolver viewResolver = new UrlBasedViewResolver();
        viewResolver.setViewClass(TilesView.class);
        return viewResolver;
    }

    @Bean
    public TilesConfigurer tilesConfigurer() {
        TilesConfigurer tilesConfigurer = new TilesConfigurer();
        tilesConfigurer.setDefinitions("/WEB-INF/tiles.xml");

        return tilesConfigurer;
}

,我添加了Apache Tiles 3和JSP的依赖关系。因为Spring Boot中的嵌入式服务器(tomcat)不支持JPS。

下面的pom.xml工作正常,但是当我按照<scope>中的说明添加tomcat-embed-jasper时。它不起作用:

    <!-- Apache Tiles 3 -->
    <dependency>
        <groupId>org.apache.tiles</groupId>
        <artifactId>tiles-jsp</artifactId>
        <version>3.0.8</version>
    </dependency>

    <!-- JSP -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>

2 个答案:

答案 0 :(得分:1)

provided意味着您希望容器(Tomcat)提供依赖关系。提供的依赖项用于编译,但未打包到您的应用程序中。

compile依赖项已打包到您的应用程序中。

答案 1 :(得分:1)

如果您指定提供的范围,则表示您希望JDK或容器在运行时提供依赖项。该依赖项不存在,因此无法找到它。

  • 编译是默认范围-这些依赖项在所有项目类路径中均可用
  • 已提供-这些依赖性将在您的环境中出现
  • 运行时-编译不是必需的,但运行时需要存在
  • 测试-测试必需
  • 系统-与提供的类似,但您需要提供jar文件