maven-assembly-plugin 和docker启动
时间: 2025-01-22 07:04:57 浏览: 37
### 结合使用 `maven-assembly-plugin` 和 Docker 进行项目打包和容器化部署
#### 使用 Maven Assembly 插件准备应用包
Maven Assembly 插件能够创建自定义的分发包,这些包可以包含项目的二进制文件、依赖库以及其他资源。为了使应用程序能够在 Docker 容器内顺利执行,通常会先通过该插件来组装所需的全部组件。
```xml
<build>
<plugins>
<!-- 配置 assembly 插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.example.MainApp</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
```
上述配置使得在执行 `mvn package` 命令时,除了常规的目标 JAR 文件外还会生成一个带有所有依赖关系的独立可执行 JAR 文件[^1]。
#### 利用 Docker 打包并发布镜像
一旦有了完整的应用程序包之后,则可以通过 Docker 来进一步将其封装成易于移植的容器映像。这里介绍两种方式:
##### 方法一:基于官方推荐的方式——Docker Maven Plugin
这是由 Fabric8 提供的一个强大的工具集的一部分,支持多种操作如构建、推送甚至管理 Kubernetes 资源等复杂任务。对于简单的场景来说,只需要关心如何把 Java 应用程序转换为 Docker 映像即可。
```xml
<!-- 添加到 pom.xml 中 -->
<plugin>
<groupId>io.fabric8</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.47.0</version>
<configuration>
<images>
<image>
<name>${docker.image.prefix}/${project.artifactId}:${project.version}</name>
<build>
<from>openjdk:alpine</from>
<entryPoint>
["java","-jar","/app.jar"]
</entryPoint>
<assembly>
<basedir>/</basedir>
<inline>
<files>
<file>
<source>${project.build.directory}/${project.build.finalName}-with-dependencies.jar</source>
<outputDirectory>/</outputDirectory>
<destName>app.jar</destName>
</file>
</files>
</inline>
</assembly>
</build>
</image>
</images>
</configuration>
</plugin>
```
这段 XML 片段展示了怎样利用 fabric8 的 docker-maven-plugin 将之前提到过的 jar 包嵌入到一个新的 Docker 映像里去,并指定入口命令让其可以直接启动服务[^5]。
##### 方法二:采用 Spotify 开发的 plugin —— dockerfile-maven-plugin
另一种流行的选择是由 Spotify 维护的 dockerfile-maven-plugin ,它提供了更细粒度控制的能力,特别是当开发者想要完全掌控 Dockerfile 编写过程的时候非常有用。
```xml
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<executions>
<execution>
<id>default-cli</id>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
<configuration>
<repository>${docker.image.prefix}/kjc/${project.artifactId}</repository>
<tag>${project.version}</tag>
<pullNewerImage>false</pullNewerImage>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
```
在此设置下,不仅指定了要使用的本地基础映像(不尝试拉取最新版本),还允许传递参数给 Docker 构建流程以便动态调整最终产物中的某些细节部分[^4]。
---
阅读全文
相关推荐


















