⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 juejin.cn/post/7297090176878116873 「凉了的凉茶」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

前言

Spring Boot 是一个非常流行的 Java 开发框架,它提供了很多便利的功能,例如自动配置、快速开发等等。

在使用 Spring Boot 进行开发时,我们通常会使用 Maven 或 Gradle 进行项目构建。

本文将为您介绍如何使用 Maven 将 Spring Boot 项目打包成可执行的 JAR 文件,并将 JAR 文件和依赖库分离,以便于在 Docker 容器中部署。

maven 依赖插件

spring-boot-maven-plugin 和 maven-dependency-plugin 的 Maven 配置。

spring-boot-maven-plugin 用于将 Spring Boot 应用程序打包为可执行的 JAR 或 WAR 存档文件,而 maven-dependency-plugin 用于将项目依赖项复制到指定位置。

spring-boot-maven-plugin 被配置为将应用程序打包为可执行的 ZIP 存档文件。

<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
<layout>ZIP</layout>
<!--解决windows命令行窗口中文乱码-->
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
<!--这里是填写需要包含进去的jar,
必须项目中的某些模块,会经常变动,那么就应该将其坐标写进来
如果没有则nothing ,表示不打包依赖 -->
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
</plugin>

maven-dependency-plugin 被配置为将项目依赖项复制到 ${project.build.directory}/lib。

将 lib 依赖拷贝到 target 目录下

<!--拷贝依赖到jar外面的lib目录-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!--指定的依赖路径-->
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
<excludeScope>provided</excludeScope>
</configuration>
</execution>
</executions>
</plugin>

maven-jar-plugin 被配置为将项目打包为 JAR 文件,并将项目依赖项复制到 ${project.build.directory}/lib。

此外,maven-jar-plugin 还配置了 JAR 文件的 MANIFEST.MF 文件,其中包含了应用程序的主类和类路径,指定 jar 加载 lib 路径

启动类需要填写你项目中的启动类

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>top.teainn.project.MyApplication</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>

在 jar 包中的 META-INF 中的 MANIFEST.MF 中可以看到依赖前面有 lib/

package 打包

打包完成后,可以看到 jar 和 lib 分离出来了

Dockerfile 文件

其中主要的是 COPY ${OUT_DIRECTORY}/lib /lib,将外部目录中的 lib 复制到容器中的 lib

# 设置jdk版本
FROM java:8

# 设置我们的个人信息,大家根据需求随便写
MAINTAINER daqi <daqi_email@163.com>

# 这两行是设置我们容器内的时间以及jvm的时间(默认不是GMT)
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone

#复制依赖 jar
COPY ${OUT_DIRECTORY}/lib /lib

# 前面的xxxxxx是我们上传的jar包名称,后面的是我们新命名的jar包
ADD Esurvey-backend-1.1.1.jar springboot.jar
# 执行我们的jar包,xxx是上面刚命名的新名字
# CMD java -jar springboot.jar

# 镜像启动成为容器后,对外暴露的端口
EXPOSE 9996

# Image创建容器时的初始化内存,最大内存,及启动时使用的profile. -c为清除以前启动的数据
# 依赖默认访问本目录下的 lib
ENTRYPOINT ["java","-Xms256m","-Xmx256m","-jar","/springboot.jar","--spring.profiles.active=prod","-c"]

其他

之后使用 Dockerfile 以及 docker-compose 部署项目可查看这篇博客

https://blog.csdn.net/weixin_62726289/article/details/134140311

文章目录
  1. 1. 前言
  2. 2. maven 依赖插件
  3. 3. package 打包
  4. 4. Dockerfile 文件
  5. 5. 其他