一个简单的Spring应用程序,当打包为一个可部署的WAR时,它只打印一个"Hello“,是11.5 MB。当我爆发战争时,web/lib文件夹是导致库太多的根本原因。
我在玩(STS)附带的‘gs- Spring -启动-完整’项目,这里是它附带的默认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.5MB。
目前只有两个直接依赖项spring-boot-starter-web & spring-boot-starter-test (我知道这可能会有其他依赖项)。
我的问题是,即使我没有嵌入式Tomcat容器,"Spring“应用程序会产生如此巨大的可部署战争吗?我试图确认是否有什么可以做的,以进行优化(我指的是小型)可部署的战争。
发布于 2015-02-17 17:31:50
如果您无意将应用程序作为可执行的war文件运行,并且只想将其部署到servlet容器中,则可以删除Spring的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的Maven插件将防止将提供的依赖项打包到war文件中。使spring-boot-starter-tomcat成为一个提供的依赖项,而不是完全排除它,将允许您使用嵌入式Tomcat运行集成测试。
这将给您一个war文件,为7.6MB。根据您的应用程序和您想要使用的技术,您还可以考虑排除spring-boot-starter-web的一些传递依赖项,例如,它引入Hibernate Validator (> 0.5MB)和Jackson (> 1MB)。
发布于 2015-02-17 15:21:52
其目的是创建包含所有依赖项的war/jar。您想部署的最低限度是什么?
Id建议删除启动时的tomcat和执行器依赖,然后重新检查大小。
https://stackoverflow.com/questions/28564730
复制相似问题