Skip to content

打包与部署

This content is not available in your language yet.

本指南介绍如何将 Feat 应用打包为可执行文件,并使用 Docker 进行部署。

使用 Maven 的 maven-shade-plugin 插件打包成包含所有依赖的可执行 jar 包。

pom.xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<!-- 追加方式合并服务文件 -->
<transformer
implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/services/tech.smartboot.feat.cloud.CloudService</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>your.package.MainClass</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Terminal window
mvn clean package

打包完成后,在 target 目录下会生成包含所有依赖的 jar 文件。

适用于传统部署场景,使用 JRE 镜像运行 jar 文件。

Dockerfile
FROM eclipse-temurin:21.0.7_6-jre-alpine
WORKDIR /feat
COPY target/helloworld_docker*.jar helloworld.jar
EXPOSE 8080
CMD ["java", "-jar", "helloworld.jar"]
Terminal window
# 构建镜像
docker build -t feat-docker:jre .
# 运行容器
docker run -p 8080:8080 feat-docker:jre

测试:http://localhost:8080/hello

使用 GraalVM 将应用编译为本地可执行文件,获得更快的启动速度和更低的资源消耗。

Dockerfile
FROM container-registry.oracle.com/graalvm/native-image:21-ol8 AS builder
COPY target/helloworld_docker*.jar helloworld.jar
# 编译为本地可执行文件
RUN native-image --no-fallback -jar helloworld.jar
# 运行阶段:使用轻量级基础镜像
FROM ubuntu:18.04
EXPOSE 8080
COPY --from=builder /app/helloworld helloworld
ENTRYPOINT ["/helloworld"]
Terminal window
# 打包应用
mvn clean package
# 构建 Native 镜像
docker build -t feat-docker:native .
# 运行容器
docker run -p 8080:8080 feat-docker:native

测试:http://localhost:8080/hello

部署方式启动速度内存占用适用场景
Fat Jar + JRE中等中等传统部署、开发测试
Native 镜像极快(毫秒级)极低云原生、Serverless、微服务

有关完整示例,请参见 helloworld_docker 示例项目