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-jettyspring-boot-sample-tomcatspring-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。