compile 和 provided 有什么区别
What is different between compile and provided
当我将 <scope>
设置为 provided
时,我的应用程序无法运行。然而,当它被编译时,它起作用了。你能解释一下它们之间有什么不同吗?
这里是tileConfig
class设置路径
@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
有效,但当我按照 tomcat-embed-jasper
中的规定添加 <scope>
时。它不起作用:
<!-- 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>
provided
表示您希望容器 (Tomcat) 提供依赖项。提供的依赖项用于编译但未打包到您的应用程序中。
compile
依赖项已打包到您的应用程序中。
如果您指定所提供的范围,则表示您希望 JDK 或容器在运行时提供依赖项。那里不存在此依赖项,因此无法找到它。
- compile 是默认范围 - 这些依赖项在所有项目类路径中都可用
- 已提供 - 这些依赖项预计会出现在您的环境中
- 运行时 - 编译时不需要,但运行时需要存在
- 测试 - 测试需要
- 系统 - 与提供的一样,但您需要提供
jar
文件
当我将 <scope>
设置为 provided
时,我的应用程序无法运行。然而,当它被编译时,它起作用了。你能解释一下它们之间有什么不同吗?
这里是tileConfig
class设置路径
@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
有效,但当我按照 tomcat-embed-jasper
中的规定添加 <scope>
时。它不起作用:
<!-- 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>
provided
表示您希望容器 (Tomcat) 提供依赖项。提供的依赖项用于编译但未打包到您的应用程序中。
compile
依赖项已打包到您的应用程序中。
如果您指定所提供的范围,则表示您希望 JDK 或容器在运行时提供依赖项。那里不存在此依赖项,因此无法找到它。
- compile 是默认范围 - 这些依赖项在所有项目类路径中都可用
- 已提供 - 这些依赖项预计会出现在您的环境中
- 运行时 - 编译时不需要,但运行时需要存在
- 测试 - 测试需要
- 系统 - 与提供的一样,但您需要提供
jar
文件