我听说Spring Boot应用程序包含一个嵌入式HTTP服务器。但是,在运行gradlew之后,我得到了一个war文件,我将其放入Tomecat的webapp目录中。显然,WAR文件不包含嵌入式HTTP服务器。那么我的build.gradle文件是否以某种方式配置为排除HTTP服务器?如果是这样,哪个选项是为此目的?
答案 0 :(得分:0)
这取决于您如何管理Spring Boot项目。使用maven或gradle,通常在创建WAR spring boot项目时,将servlet容器依赖项标记为已提供(它将由将在其中部署WAR的servlet提供)。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
这意味着来自此依赖项的所有功能实现都不会打包在最终工件中,而是由将部署此工件的环境提供。 (例如,Tomcat服务器。)
另一方面,如果您未标记servlet依赖性,则它将与项目一起打包(作为嵌入式服务器,但背后隐藏着更多的魔力),该项目将创建独立的应用程序。请注意,带有嵌入式服务器的项目的包装也应更改为JAR。同样,这不适用于不使用servlet的Reactor项目。
答案 1 :(得分:0)
默认的Spring Boot应用程序(仅具有spring-boot-starter
作为依赖项)默认情况下不包含嵌入式servlet。
但是,如果您有spring-boot-starter-web
应用程序,则有一个嵌入式的tomcat servlet。
Here,您可以看到使用spring-boot-starter-web
时都会导入的Gradle依赖项。您可以看到它包含以下代码行:
api(project(":spring-boot-project:spring-boot-starters:spring-boot-starter-tomcat"))
这使我们进入了自动导入的spring-boot-starter-tomcat
依赖关系。 [Here][2]
,我们看到以下内容:
api("org.apache.tomcat.embed:tomcat-embed-core") {
exclude group: "org.apache.tomcat", module: "tomcat-annotations-api"
}
因此,您可以看到Spring Boot如何以及在何处包括嵌入式servlet依赖项。