一个简单的Spring Boot应用程序仅打印一个“Hello World”,当它打包为一个可部署的WAR时,它的大小为11.5MB。当我爆发战争时,WEB-INF/lib文件夹是库太多的根本原因。
我在玩Spring测试套件(STS)附带的'gs-spring-boot-complete'项目,下面是附带的默认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-actuctor的依赖,仍然是11.5MB。
目前只有两个直接依赖关系spring-boot-starter-web和spring-boot-starter-test(我知道这可能反过来有其他依赖关系)。
我的问题是,即使我不打算拥有嵌入式Tomcat容器,“Spring Boot”应用程序是否会生成如此巨大的可部署战争?我试图确认是否有任何事情可以做,以有一个优化的(我的意思是小型)可部署的战争。
如果您不想将应用程序作为可执行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的war文件。根据您的应用程序和希望使用的技术,您可能还需要考虑排除spring-boot-starter-web
的一些可传递依赖项。例如,它引入了Hibernate Validator(>0.5MB)和Jackson(>1MB)。
完成干净的构建后,我将war文件复制到Tomcat的文件夹中。但是部署会发生两次,并且在上下文已经存在的情况下以异常结束。我错过了什么? 非常感谢您的帮助。
尝试在Heroku云中部署Spring Boot应用程序,但编译java应用程序时出现错误,但在我的本地计算机中运行良好。
Requirements 运行一个Spark Streaming应用程序,有下面一些步骤 有管理器的集群-这是任何Spark应用程序都需要的需求,详见部署指南 将应用程序打为jar包-你必须编译你的应用程序为jar包。如果你用spark-submit启动应用程序,你不需要将Spark和Spark Streaming打包进这个jar包。 如果你的应用程序用到了高级源(如kafka,flume),你需
同时,当前稳定的Debian版本仍然没有Java 11软件包(Ubuntu在openjdk-11软件包下安装了Java10),这就是为什么不稳定的sid版本被用于基本docker映像 当前可用的Oracle openjdk-11映像构建未剥离的模块,该模块具有数百兆字节,必须单独剥离: 从openjdk创建的JLink运行时映像大小(特别是libjvm.so)非常大。预期它会小得多。 解决方案:h
问题内容: 受问题启发,为什么Java 11基本Docker映像这么大?(openjdk:11-jre-slim)我发现Java世界中的这个话题仍然没有解决。 至于常见问题/陷阱(在上面的票证中讨论): JRE没有作为单独的“包”分发。应改用JDK的模块 Oracle OpenJDK 11不支持Linux Alpine,因此无法轻松创建 轻量级 映像 同时,当前稳定的Debian版本仍然没有Jav