一个简单的Spring Boot应用程序,它只打印一个" Hello World"打包为可部署的WAR时为11.5 MB。当我爆炸WAR时,web-inf / lib文件夹是导致库太多的根本原因。
- 如何使用最少的必需/从属库创建WAR?
- 虽然提及 提供 作为 spring-boot-starter-tomcat 的范围,但是嵌入式Tomcat服务器是否存在?仍然与WAR一起打包?
醇>
我正在玩#gs-spring-boot-complete' Spring Test Suite(STS)附带的项目,这是随附的默认POM。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.springframework</groupId>
<artifactId>gs-spring-boot</artifactId>
<version>0.1.0</version>
<!-- ... -->
<packaging>war</packaging>
<!-- ... -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.1.10.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<!-- tag::actuator[] -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- end::actuator[] -->
<!-- tag::tests[] -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- end::tests[] -->
</dependencies>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
更新: 我从POM中移除了对 spring-boot-starter-tomcat 和 spring-boot-starter-actuator 的依赖关系,但WAR仍为11.5 MB。
目前只有2个直接依赖 spring-boot-starter-web &amp; spring-boot-starter-test (据我所知,这可能会产生其他依赖关系)。
我的问题是,即使我不打算使用嵌入式Tomcat 容器,做&#34; Spring Boot&#34;应用程序产生如此巨大 可部署的WAR?我想确认是否有任何东西 可以做一个优化(我的意思是小型)可部署的WAR。
答案 0 :(得分:5)
如果您没有兴趣将应用程序作为可执行war文件运行,并且只想将其部署到servlet容器,那么您可以删除Spring Boot的Maven插件并将spring-boot-starter-tomcat
声明为提供的依赖项:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>example-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
删除Spring Boot的Maven插件将阻止在war文件中打包提供的依赖项。使spring-boot-starter-tomcat
提供的依赖关系,而不是完全排除它,将允许您使用嵌入式Tomcat运行集成测试。
这将为您提供7.6MB的战争文件。根据您的应用程序和要使用的技术,您可能还需要考虑排除某些spring-boot-starter-web
的传递依赖项。例如,它正在吸收Hibernate Validator(> 0.5MB)和Jackson(> 1MB)。
答案 1 :(得分:0)
目的是创建一个包含所有依赖项的war / jar。您想要部署的最低要求是什么?
我建议删除tomcat和执行器依赖关系以启动 - 然后重新检查大小