Размер Spring boot WAR с разными встроенными серверами

Я провожу некоторые эксперименты с spring-boot и понял, что когда я использую встроенный сервер Tomcat, результирующий размер WAR меньше, чем когда я использую серверы Jetty или даже Undertow с такими же остальными зависимостями.

Как это возможно? ... предполагается, что 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>

person Rafael    schedule 17.03.2015    source источник
comment
Вы пробовали разархивировать файл .war и заглянуть в папку /lib, чтобы узнать, откуда берется лишний вес?   -  person kryger    schedule 18.03.2015


Ответы (1)


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 не поддерживает JSP, а Spring Boot по умолчанию не включает поддержку JSP Tomcat. ~1,7 МБ архива на основе Jetty занимает компилятор Eclipse Java, который используется для компиляции JSP. Если вы хотите использовать Jetty и не используете JSP, вы можете исключить зависимость org.eclipse.jetty:jetty-jsp. Это уменьшает размер артефакта на основе Jetty до 8,8 МБ.

person Andy Wilkinson    schedule 18.03.2015
comment
Также как это увеличивает размер приложения при развертывании этих встроенных серверов приложений? - person Zon; 31.07.2019