前言
Spring Boot 是一個(gè)非常流行的 Java 開發(fā)框架,它提供了很多便利的功能,例如自動(dòng)配置、快速開發(fā)等等。
在使用 Spring Boot 進(jìn)行開發(fā)時(shí),我們通常會(huì)使用 Maven 或 Gradle 進(jìn)行項(xiàng)目構(gòu)建。
本文將為您介紹如何使用 Maven 將 Spring Boot 項(xiàng)目打包成可執(zhí)行的 JAR 文件,并將 JAR 文件和依賴庫分離,以便于在 Docker 容器中部署。
maven 依賴插件
spring-boot-maven-plugin
和 maven-dependency-plugin
的 Maven 配置。
spring-boot-maven-plugin
用于將 Spring Boot 應(yīng)用程序打包為可執(zhí)行的 JAR 或 WAR 存檔文件,而 maven-dependency-plugin
用于將項(xiàng)目依賴項(xiàng)復(fù)制到指定位置。
spring-boot-maven-plugin
被配置為將應(yīng)用程序打包為可執(zhí)行的 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>
<!--這里是填寫需要包含進(jìn)去的jar,
必須項(xiàng)目中的某些模塊,會(huì)經(jīng)常變動(dòng),那么就應(yīng)該將其坐標(biāo)寫進(jìn)來
如果沒有則nothing ,表示不打包依賴 -->
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
</configuration>
</plugin>
maven-dependency-plugin
被配置為將項(xiàng)目依賴項(xiàng)復(fù)制到 ${project.build.directory}/lib
。
將 lib
依賴拷貝到 target
目錄下
<!--拷貝依賴到j(luò)ar外面的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
被配置為將項(xiàng)目打包為 JAR 文件,并將項(xiàng)目依賴項(xiàng)復(fù)制到 ${project.build.directory}/lib
。
此外,maven-jar-plugin
還配置了 JAR 文件的 MANIFEST.MF
文件,其中包含了應(yīng)用程序的主類和類路徑,指定 jar
加載 lib
路徑
啟動(dòng)類需要填寫你項(xiàng)目中的啟動(dòng)類
<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
復(fù)制到容器中的 lib
# 涼了的涼茶
# 設(shè)置jdk版本
FROM java:8
# 設(shè)置我們的個(gè)人信息,大家根據(jù)需求隨便寫
MAINTAINER daqi <daqi_email@163.com>
# 這兩行是設(shè)置我們?nèi)萜鲀?nèi)的時(shí)間以及jvm的時(shí)間(默認(rèn)不是GMT)
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
#復(fù)制依賴 jar
COPY ${OUT_DIRECTORY}/lib /lib
# 前面的xxxxxx是我們上傳的jar包名稱,后面的是我們新命名的jar包
ADD Esurvey-backend-1.1.1.jar springboot.jar
# 執(zhí)行我們的jar包,xxx是上面剛命名的新名字
# CMD java -jar springboot.jar
# 鏡像啟動(dòng)成為容器后,對(duì)外暴露的端口
EXPOSE 9996
# Image創(chuàng)建容器時(shí)的初始化內(nèi)存,最大內(nèi)存,及啟動(dòng)時(shí)使用的profile. -c為清除以前啟動(dòng)的數(shù)據(jù)
# 依賴默認(rèn)訪問本目錄下的 lib
ENTRYPOINT ["java","-Xms256m","-Xmx256m","-jar","/springboot.jar","--spring.profiles.active=prod","-c"]
其他
之后使用 Dockerfile 以及 docker-compose 部署項(xiàng)目可查看這篇博客文章來源:http://www.zghlxwxcb.cn/news/detail-745681.html
使用 docker-compose 部署 SpringBoot 項(xiàng)目 & nginx 部署前端文章來源地址http://www.zghlxwxcb.cn/news/detail-745681.html
到了這里,關(guān)于SpringBoot 將 jar 包和 lib 依賴分離,dockerfile 構(gòu)建鏡像的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!