专栏名称: Java知音
专注于Java,推送技术文章,热门开源项目等。致力打造一个有实用,有情怀的Java技术公众号!
目录
相关文章推荐
无锡市场监管  ·  重磅升级!锡小服小程序搭载 ... ·  13 小时前  
无锡市场监管  ·  重磅升级!锡小服小程序搭载 ... ·  13 小时前  
海口之声  ·  这晚到底有多少人同时“在线”? ·  16 小时前  
海口之声  ·  这晚到底有多少人同时“在线”? ·  16 小时前  
数字生命卡兹克  ·  起猛了,腾讯元宝接入DeepSeek了。 ·  昨天  
数字生命卡兹克  ·  起猛了,腾讯元宝接入DeepSeek了。 ·  昨天  
广东民生频道  ·  “雪村没有雪”?通报:情况属实!拆除! ·  2 天前  
广东民生频道  ·  “雪村没有雪”?通报:情况属实!拆除! ·  2 天前  
51好读  ›  专栏  ›  Java知音

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

Java知音  · 公众号  · 互联网短视频  · 2024-10-18 10:05

主要观点总结

本文介绍了如何使用Maven将Spring Boot项目打包成可执行的JAR文件,并将JAR文件与依赖库分离,以便在Docker容器中部署。文章涵盖了Maven配置、依赖管理、JAR打包以及Dockerfile的使用。

关键观点总结

关键观点1: 使用Maven打包Spring Boot项目为可执行的JAR文件

介绍了如何使用spring-boot-maven-plugin插件将Spring Boot应用程序打包为可执行的JAR或WAR存档文件。

关键观点2: 将JAR文件和依赖库分离

通过使用maven-dependency-plugin插件,将项目依赖项复制到指定位置,实现了JAR文件和依赖库的分离。

关键观点3: 使用Dockerfile部署JAR文件

介绍了如何创建Dockerfile文件,使用COPY命令将JAR文件和依赖库复制到容器中,并设置容器启动时的相关配置。

关键观点4: 其他注意事项

包括使用Docker Compose部署项目的方法、如何设置JVM参数以及防范被骗的提醒。


正文

前言

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版本






请到「今天看啥」查看全文


推荐文章
海口之声  ·  这晚到底有多少人同时“在线”?
16 小时前
海口之声  ·  这晚到底有多少人同时“在线”?
16 小时前
数字生命卡兹克  ·  起猛了,腾讯元宝接入DeepSeek了。
昨天
数字生命卡兹克  ·  起猛了,腾讯元宝接入DeepSeek了。
昨天
FitTime睿健时代  ·  让人又爱又恨的坚果,这样吃,没毛病!
7 年前