社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  docker

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

架构师 • 2 月前 • 102 次点击  
架构师(JiaGouX)
我们都是架构师!
架构未来,你来不来?



  • 前言
  • maven 依赖插件
  • package 打包
  • Dockerfile 文件
  • 其他

前言

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.bootgroupId>
    <artifactId>spring-boot-maven-pluginartifactId>
    <configuration>
        < executable>trueexecutable>
        <layout>ZIPlayout>
        
        <jvmArguments>-Dfile.encoding=UTF-8jvmArguments>
        
        <includes>
            <include>
                <groupId>nothinggroupId>
                <artifactId>nothingartifactId>
            include>
        includes>
    configuration>
plugin>

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

将 lib 依赖拷贝到 target 目录下


<plugin>
    <groupId>org.apache.maven.pluginsgroupId>
    <artifactId>maven-dependency-pluginartifactId>
    <executions>
        <execution>
            <id>copyid>
            <phase>packagephase>
            <goals>
                <goal>copy-dependenciesgoal>
            goals>
            <configuration>
                
                <outputDirectory>
                    ${project.build.directory}/lib
                outputDirectory>
                <excludeScope>providedexcludeScope>
            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-pluginartifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>top.teainn.project.MyApplicationmainClass>
                <addClasspath>trueaddClasspath>
                <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 

# 这两行是设置我们容器内的时间以及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

如喜欢本文,请点击右上角,把文章分享到朋友圈
如有想了解学习的技术点,请留言给若飞安排分享

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享

·END·

相关阅读:


  • 一张图看懂微服务架构路线
  • 基于Spring Cloud的微服务架构分析
  • 微服务等于Spring Cloud?了解微服务架构和框架
  • 如何构建基于 DDD 领域驱动的微服务?
  • 小团队真的适合引入SpringCloud微服务吗?

  • DDD兴起的原因以及与微服务的关系

  • 微服务之间的最佳调用方式

  • 微服务架构设计总结实践

  • 基于 Kubernetes 的微服务项目设计与实现

  • 微服务架构-设计总结

  • 为什么微服务一定要有网关?

  • 主流微服务全链路监控系统之战

  • 微服务架构实施原理详解
  • 微服务的简介和技术栈
  • 微服务场景下的数据一致性解决方案
  • 设计一个容错的微服务架构

作者:凉了的凉茶

来源:juejin.cn/post/7297090176878116873

版权申明:内容来源网络,仅供学习研究,版权归原创者所有。如有侵权烦请告知,我们会立即删除并表示歉意。谢谢!

架构师

我们都是架构师!



关注架构师(JiaGouX),添加“星标”

获取每天技术干货,一起成为牛逼架构师

技术群请加若飞:1321113940 进架构师群

投稿、合作、版权等邮箱:admin@137x.com

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/177856
 
102 次点击