SpringBoot 将 jar 包和 lib 依赖分离,Dockerfile 构建镜像

戳上方蓝字“Java面试题精选”关注我!

前言

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

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

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

maven 依赖插件

spring-boot-maven-pluginmaven-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/

SpringBoot 将 jar 包和 lib 依赖分离,Dockerfile 构建镜像

package 打包

SpringBoot 将 jar 包和 lib 依赖分离,Dockerfile 构建镜像

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

SpringBoot 将 jar 包和 lib 依赖分离,Dockerfile 构建镜像

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

来源:juejin.cn/post/7297090176878116873
后端专属技术群

构建高质量的技术交流社群,欢迎从事编程开发、技术招聘HR进群,也欢迎大家分享自己公司的内推信息,相互帮助,一起进步!

文明发言,以交流技术职位内推行业探讨为主

广告人士勿入,切勿轻信私聊,防止被骗

SpringBoot 将 jar 包和 lib 依赖分离,Dockerfile 构建镜像

加我好友,拉你进群

SpringBoot 将 jar 包和 lib 依赖分离,Dockerfile 构建镜像

原文始发于微信公众号(Java面试题精选):SpringBoot 将 jar 包和 lib 依赖分离,Dockerfile 构建镜像

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/304429.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!