社区所有版块导航
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 构建镜像

Java知音 • 5 月前 • 309 次点击  

前言

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.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.pluginsgroupId>
    <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

来源:juejin.cn/post/7297090176878116873

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

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

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

加我好友,拉你进群

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