Spring boot WAR 不同嵌入式服务器的大小
Spring boot WAR size with different embedded servers
我正在使用 spring-boot 进行一些实验,我意识到当我使用嵌入式 Tomcat 服务器时,生成的 WAR 大小比我使用 Jetty 甚至 Undertow 时要小具有相同 rest 依赖关系的服务器。
这怎么可能? ...与 tomcat.
相比,Undertow 和 Jetty 应该是超轻的
尺寸为:
Tomcat~18Mb
暗流~21Mb
码头~24Mb
它们中的任何一个对我来说都太大了,因为这是虚拟的 REST 端点。
这些是我的依赖项:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.springframework.boot</groupId> -->
<!-- <artifactId>spring-boot-starter-tomcat</artifactId> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>org.springframework.boot</groupId> -->
<!-- <artifactId>spring-boot-starter-undertow</artifactId> -->
<!-- </dependency> -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.springframework.boot</groupId> -->
<!-- <artifactId>spring-boot-starter-test</artifactId> -->
<!-- <scope>test</scope> -->
<!-- </dependency> -->
</dependencies>
Spring Boot 包括三个示例应用程序,spring-boot-sample-jetty
、spring-boot-sample-tomcat
和 spring-boot-sample-undertow
,它们具有最少且几乎相同的功能。使用 Spring Boot 1.2.2.RELEASE,存档大小为:
spring-boot-sample-jetty
- 12MB
spring-boot-sample-tomcat
- 9.8MB
spring-boot-sample-undertow
- 9.6MB
如您所见,Tomcat 和 Undertow 几乎相同,Jetty 工件大约大 20%。
大小差异的一个显着原因是 JSP 支持。默认情况下,Undertow 不支持 JSPs 并且 Spring Boot 不包括 Tomcat 的 JSP 支持。约 1.7MB 的基于 Jetty 的存档被用于 JSP 编译的 Eclipse Java 编译器占用。如果你想使用 Jetty 而不是使用 JSPs,你可以排除 org.eclipse.jetty:jetty-jsp
依赖。这将基于 Jetty 的工件的大小减少到 8.8MB。
我正在使用 spring-boot 进行一些实验,我意识到当我使用嵌入式 Tomcat 服务器时,生成的 WAR 大小比我使用 Jetty 甚至 Undertow 时要小具有相同 rest 依赖关系的服务器。
这怎么可能? ...与 tomcat.
相比,Undertow 和 Jetty 应该是超轻的尺寸为:
Tomcat~18Mb
暗流~21Mb
码头~24Mb
它们中的任何一个对我来说都太大了,因为这是虚拟的 REST 端点。 这些是我的依赖项:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.springframework.boot</groupId> -->
<!-- <artifactId>spring-boot-starter-tomcat</artifactId> -->
<!-- </dependency> -->
<!-- <dependency> -->
<!-- <groupId>org.springframework.boot</groupId> -->
<!-- <artifactId>spring-boot-starter-undertow</artifactId> -->
<!-- </dependency> -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<!-- <dependency> -->
<!-- <groupId>org.springframework.boot</groupId> -->
<!-- <artifactId>spring-boot-starter-test</artifactId> -->
<!-- <scope>test</scope> -->
<!-- </dependency> -->
</dependencies>
Spring Boot 包括三个示例应用程序,spring-boot-sample-jetty
、spring-boot-sample-tomcat
和 spring-boot-sample-undertow
,它们具有最少且几乎相同的功能。使用 Spring Boot 1.2.2.RELEASE,存档大小为:
spring-boot-sample-jetty
- 12MBspring-boot-sample-tomcat
- 9.8MBspring-boot-sample-undertow
- 9.6MB
如您所见,Tomcat 和 Undertow 几乎相同,Jetty 工件大约大 20%。
大小差异的一个显着原因是 JSP 支持。默认情况下,Undertow 不支持 JSPs 并且 Spring Boot 不包括 Tomcat 的 JSP 支持。约 1.7MB 的基于 Jetty 的存档被用于 JSP 编译的 Eclipse Java 编译器占用。如果你想使用 Jetty 而不是使用 JSPs,你可以排除 org.eclipse.jetty:jetty-jsp
依赖。这将基于 Jetty 的工件的大小减少到 8.8MB。