最近、学習プロジェクトモジュールのコンテナ化デプロイを開始したところ、ゲートウェイモジュール(gate-way)に検証コードが読み込めないという問題が発生し、その処理が少し複雑だったので記録しておきます。次回同じ問題をすぐに解決できます。
CentOS7 に docker と docker-compose をインストールして構成するには、CentOS7 に基づいた docker と docker-compose のインストールと構成に関する私の記事を参照してください。
1. エラーメッセージと解決策
1.1 エラーメッセージ
2023-08-23 00:52:16 [reactor-http-epoll-1] ERROR reactor.netty.http.server.HttpServer
2023-08-22T16:52:16.162476048Z - [a88e488c-1, L:/192.168.1.16:8080 - R:/192.168.1.12:4910]
2023-08-22T16:52:16.162478312Z java.lang.NoClassDefFoundError: Could not initialize class sun.font.SunFontManager
Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.UnsatisfiedLinkError: /usr/local/java/jdk-11.0.19/lib/libfontmanager.so: libfreetype.so.6: cannot open shared object file: No such file or directory [in thread "reactor-http-epoll-2"]
2023-08-22T16:52:16.162718578Z at java.base/java.lang.ClassLoader$NativeLibrary.load0(Native Method)
メインエラー:
java.lang.NoClassDefFoundError: クラス sun.font.SunFontManager を初期化できませんでした-つまり、SunFontManager クラスを初期化できず、/usr/local/java/jdk-11.0.19/lib/libfontmanager.so: libfreetype。 so.6: 共有オブジェクト ファイルを開けません: そのようなファイルまたはディレクトリはありません [スレッド「reactor-http-epoll-2」内] -つまり、libfontmanager.so: libfreetype.so.6 ファイルまたはディレクトリが見つかりません
概要:就是JDK里缺少了字体相关的包和文件,而验证码模块需要使用这些,所以导致无法生成并加载验证码。
プロジェクト モジュールのコンテナ化されたデプロイメントで使用されるJDK イメージ ソースは、dockerfile ファイルとdocker build コマンドを使用して自分で手動でビルドしました。詳細な構築プロセスについては、私の記事を参照してください: dockerfile を使用して JDK11 イメージを手動でビルドし、実行しますコンテナを確認してください。
1.2 解決策 1 - JDK を手動でビルドするために dockerfile を変更し (フォント サポートと中国語サポートを追加)、JDK イメージ ソースを手動で再度ビルドします。
解决思路1:
1、修改手动构建JDK的dockerfile文件,在dockerfile文件添加安装字体和支持中文的配置。
2、重新docker build构建(添加了安装字体和支持中文的配置)新的JDK镜像源。
3、在项目模块的dockerfile中配置新构建的JDK的源。
4、注意:如果你是在Windows或者mac的IDEA本地环境中修改了dockerfile,记得要将修改后的dockerfile同步到服务器中,否则对dockerfile文件所做的修改是不会生效的。
5、删除(配置旧JDK:没有添加安装字体和支持中文)容器化的项目模块镜像和容器。
//删除镜像
docker rmi 镜像标识 (镜像名或者ID)
//强制删除镜像
docker rmi -f 镜像标识 (镜像名或者ID)
//删除容器
docker rm 容器标识(容器名或ID)
6、重新将项目模块容器化(在项目模块的dockerfile中配置新构建的JDK的源后,重新构建镜像和启动容器(此处直接使用deploy.sh脚本启动,脚本里配置了docker-compose命令,结合docker-compose.yml文件一起使用,docker-compose命令可以同时多个构建项目模块镜像,并基于该镜像启动该项目容器))。
a、deploy.sh脚本启动,脚本里配置了docker-compose命令。
b、docker-compose命令结合docker-compose.yml文件一起使用。
c、docker-compose.yml文件中配置了docker-compose命令的build参数和项目模块dockerfile文件的位置。
d、docker-compose命令可以同时构建多个项目模块镜像,并基于该镜像启动该项目容器。
//deploy.sh脚本 文件部分内容
# 启动程序模块(必须)
services(){
docker-compose up -d ruoyi-gateway ruoyi-auth ruoyi-system
}
==============================================================================================================
//docker-compose.yml文件中部分内容
ruoyi-gateway:
image: ruoyi/ruoyi-gateway:1.7.0
container_name: ruoyi-gateway
build:
context: ./ruoyi2023731/gateway
#dockerfile的文件名称
dockerfile: dockerfile
environment:
# 时区上海
TZ: Asia/Shanghai
ports:
- "8080:8080"
volumes:
# 配置文件
- /docker/ruoyi-gateway/logs/:/ruoyi/gateway/logs
# skywalking 探针
- /docker/skywalking/agent/:/ruoyi/skywalking/agent
privileged: true
network_mode: "host"
ruoyi-auth:
image: ruoyi/ruoyi-auth:1.7.0
container_name: ruoyi-auth
build:
context: ./ruoyi2023731/auth
#dockerfile的文件名称
dockerfile: dockerfile
environment:
# 时区上海
TZ: Asia/Shanghai
ports:
- "9210:9210"
volumes:
# 配置文件
- /docker/ruoyi-auth/logs/:/ruoyi/auth/logs
# skywalking 探针
- /docker/skywalking/agent/:/ruoyi/skywalking/agent
privileged: true
network_mode: "host"
ruoyi-system:
# 镜像名 : 仓库/标签:版本
image: ruoyi/ruoyi-system:1.7.0
container_name: ruoyi-system
#djc构建镜像-images的命令 2023-8-3 18:11:13
# 指定dockerfile的上下文路径(相对当前docker-compose.yml的位置)
# 包含Dockerfile文件的目录路径,或者是git仓库的URL。
#当提供的值是相对路径时,它被解释为相对于当前compose文件的位置。
#该目录也是发送到Docker守护程序构建镜像的上下文。
build:
context: ./ruoyi2023731/system
#dockerfile的文件名称
dockerfile: dockerfile
#本来这里有个ports的,但显示与下面的ports冲突,可能只要配置一个就可以了,对位置没有太多要求
# depends_on: 依赖(以指定顺序启动)
# links也可以起到和depends_on相似的功能,即定义服务之间的依赖关系,从而确定服务启动的顺序
environment:
# 时区上海
TZ: Asia/Shanghai
ports:
- "9201:9201"
volumes:
# 配置文件
- /docker/ruoyi-system/logs/:/ruoyi/system/logs
# skywalking 探针
- /docker/skywalking/agent/:/ruoyi/skywalking/agent
privileged: true
network_mode: "host"
==============================================================================================================
缺点:如果自己使用dockerfile手动构建的JDK11镜像,添加了安装字体和支持中文的配置后,能解决现在的问题。不能保证后面这个
手动构建的JDK后面会不会发生其他问题。如果发生了其他错误,又要重新修改手动构建的JDK的dockerfile,删除手动构建的JDK的旧镜像和容器,重新执行脚本构建新的JDK,着实麻烦。
1.3 解決策 2 - Huawei の JDK イメージ ソースを直接使用する
2. JDK を手動でビルドするために dockerfile を変更し (フォント サポートと中国語サポートを追加)、JDK イメージ ソースを手動で再度ビルドします。
2.1変更前にJDK dockerfile を手動でビルドする
# 建立一个新的镜像文件,配置模板:新建立的镜像是以centos为基础模板
# 因为jdk必须运行在操作系统之上
#每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
#第一条FROM,指定使用哪个镜像源
FROM centos:7.9.2009
#维护者 作者 邮箱
MAINTAINER djcking <djc**4*****@qq.com>
#RUN 指令告诉docker 在镜像内执行命令,安装了什么
#创建一个新目录来存储jdk文件
RUN mkdir "/usr/local/java"
#将jdk压缩文件复制到镜像中,它将自动解压缩tar文件
ADD jdk-11.0.19_linux-x64_bin.tar.gz /usr/local/java
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 设置环境变量
ENV JAVA_HOME /usr/local/java/jdk-11.0.19
ENV PATH $JAVA_HOME/bin:$PATH
# VOLUME 指定了临时文件目录为/tmp
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
2.2 JDK を手動でビルドするための変更された dockerfile
サポートされているフォントのインストールと中国語サポートの設定のための構成を追加しました。
# 建立一个新的镜像文件,配置模板:新建立的镜像是以centos为基础模板
# 因为jdk必须运行在操作系统之上
#每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
#第一条FROM,指定使用哪个镜像源
FROM centos:7.9.2009
#维护者 作者 邮箱
MAINTAINER djcking <djc**4*****@qq.com>
#RUN 指令告诉docker 在镜像内执行命令,安装了什么
#创建一个新目录来存储jdk文件
RUN mkdir "/usr/local/java"
#将jdk压缩文件复制到镜像中,它将自动解压缩tar文件
ADD jdk-11.0.19_linux-x64_bin.tar.gz /usr/local/java
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 安装支持的字体 【修改处1】
RUN yum install fontconfig -y
# 设置中文支持 【修改处2】
# setup language 解决中文乱码
ENV LANG C.UTF-8
# 设置环境变量
ENV JAVA_HOME /usr/local/java/jdk-11.0.19
ENV PATH $JAVA_HOME/bin:$PATH
# VOLUME 指定了临时文件目录为/tmp
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
1.3 変更した JDK dockerfile と jdk 圧縮パッケージ ファイルをアップロードする
dockerfileおよびjdk イメージ ファイルを**/home/mydockerfile2** ファイルにアップロードします
2.4 JDKイメージのビルド
最後にドットがあることに注意してください。これは、現在のパスの Dockerfile を使用してビルドすることを意味します。
docker build -t djcjdk202395:11 .
2.5 ゲートウェイの dockerfile で独自の djcjdk202395-11 を構成する
# 基础镜像
#FROM anapsix/alpine-java:8_server-jre_unlimited
#FROM openjdk:11-jre
#FROM anapsix/alpine-java:11_server-jre_unlimited
#配置自己的djcjdk202395:11 2023-9-5 00:36:42
#FROM djcjdk202395:11
# author
MAINTAINER djc
# 挂载目录
VOLUME /home/ruoyi202381
# 创建目录
RUN mkdir -p /home/ruoyi202381
# 指定路径
WORKDIR /home/ruoyi202381
# 复制jar文件到路径
COPY ./jar/gateway.jar /home/ruoyi202381/gateway.jar
# 启动用户服务 网关服务
ENTRYPOINT ["java","-jar","gateway.jar"]
2.6 古いゲートウェイ イメージとコンテナを削除する (中国語サポートまたはフォント サポートなし)
イメージとコンテナーを削除するには、基本的な Docker 操作に関する私の記事を参照してください: コンテナーの削除 コンテナーとイメージの削除 IMAGE
//イメージの削除
docker rmi イメージ識別 (イメージ名または ID)
//イメージの強制削除
docker rmi -f イメージ識別(イメージ名またはID)
//コンテナを削除
docker rm コンテナ識別 (コンテナ名または ID)
2.7 ゲートウェイモジュールの再構築
cd /opt/docker-compose/ruoyicloudplus/docker/ruoyi2023731/gateway
docker-compose up -d ruoyi-gateway
ビルドに失敗しました
Exception in thread "main" java.lang.UnsupportedClassVersionError: com/ruoyi/gateway/RuoYiGatewayApplication has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
2023-09-05T00:50:49.629236904Z at java.lang.ClassLoader.defineClass1(Native Method)
说明JDK有问题,这个问题之前遇到过。
3. Huawei の JDK イメージ ソースを直接使用する
3.1 画像ソースの取得
//1-拉取华为JDK镜像源
docker pull swr.ap-southeast-3.myhuaweicloud.com/oracle/jdk:11
//2-给镜像源打标签
docker tag 457a2c8597a1 hw-oracle/jdk:11
3.2 3 つの主要モジュールの古いイメージとコンテナを削除する
イメージとコンテナを削除するには、 gateway (ゲートウェイ)、auth (認証および認可センター)、system (システム モジュール)を使用します。基本的な Docker 操作に関する記事を参照してください: コンテナの削除 Container と image IMAGE の削除
//删除镜像
docker rmi 镜像标识 (镜像名或者ID)
//强制删除镜像
docker rmi -f 镜像标识 (镜像名或者ID)
//删除容器
docker rm 容器标识(容器名或ID)
3.3 3 つの主要モジュールで Huawei の画像ソースを構成して使用する
3.3.1 ゲートウェイの dockerfile 設定は Huawei の JDK イメージ ソースを使用します
# 基础镜像
#FROM anapsix/alpine-java:8_server-jre_unlimited
#FROM openjdk:11-jre
#FROM anapsix/alpine-java:11_server-jre_unlimited
#配置自己的djcjdk202395:11 2023-9-5 00:36:42
#FROM djcjdk202395:11
#配置使用华为的JDK镜像源 2023-9-5 01:12:48
FROM hw-oracle/jdk:11
# author
MAINTAINER djc djc****@qq.com
# 挂载目录
VOLUME /home/ruoyi202381
# 创建目录
RUN mkdir -p /home/ruoyi202381
# 指定路径
WORKDIR /home/ruoyi202381
# 复制jar文件到路径
COPY ./jar/gateway.jar /home/ruoyi202381/gateway.jar
# 启动用户服务 网关服务
ENTRYPOINT ["java","-jar","gateway.jar"]
3.3.2 Auth の dockerfile 設定は Huawei の JDK イメージ ソースを使用します
# 基础镜像
#FROM anapsix/alpine-java:8_server-jre_unlimited
#FROM openjdk:11-jre
#FROM anapsix/alpine-java:11_server-jre_unlimited
#配置使用华为的JDK镜像源 2023-9-5 01:12:48
FROM hw-oracle/jdk:11
# author
MAINTAINER djc <djc**4*****@qq.com>
# 挂载目录
VOLUME /home/ruoyi202381
# 创建目录
RUN mkdir -p /home/ruoyi202381
# 指定路径
WORKDIR /home/ruoyi202381
# 复制jar文件到路径
COPY ./jar/auth.jar /home/ruoyi202381/auth.jar
# 启动用户服务 认证授权中心服务
ENTRYPOINT ["java","-jar","auth.jar"]
3.3.3 システムモジュールの dockerfile 設定は Huawei の JDK イメージソースを使用します
# 基础镜像
#FROM anapsix/alpine-java:8_server-jre_unlimited
#FROM openjdk:11-jre
#FROM anapsix/alpine-java:11_server-jre_unlimited
#配置使用华为的JDK镜像源 2023-9-5 01:12:48
FROM hw-oracle/jdk:11
# author
MAINTAINER djc <djc**4*****@qq.com>
# 挂载目录
VOLUME /home/ruoyi202381
# 创建目录
RUN mkdir -p /home/ruoyi202381
# 指定路径
WORKDIR /home/ruoyi202381
# 复制jar文件到路径
COPY ./jar/system.jar /home/ruoyi202381/system.jar
# 启动用户服务 系统模块服务
ENTRYPOINT ["java","-jar","system.jar"]
3.4 3 つのメジャー モジュール イメージを再構築し、3 つのメジャー モジュール コンテナを起動します。
3.4.1 フロントエンド dist パッケージと nginx のインストール構成 (nginx.conf)
404 問題を解決すると、デプロイメント プロジェクトのバックエンドがリクエストを受け入れることができません。ruoyi
-ui/.env.production の VUE_APP_BASE_API を変更し、
ruoyi-ui/.env.production の VUE_APP_BASE_API を VUE_APP_BASE_API='http://192.168 に設定します。 1.16:8080 '
IP はパブリック ネットワーク IP として構成する必要があり、ポート番号はバックエンドと一致している必要があります。
vue.config.js
ターゲット: http://localhost:8080 をターゲット: http://192.168.1.16:8080 に変更します。
3.4.2 3 つの主要なバックエンド モジュール イメージ (gateway-auth-system) を開始します。
重要なポイント:
1. ファイアウォールの設定に注意し、いくつかのサービス ポートを開きます。ruoyigateway8080、ruoyi-system9201、ruoyi-auth9210、 mysql3306、redis6379、nacos8848、seata-server8091 ポート
を開くようにファイアウォールを設定します。
2. スクリプト コマンドshdeploy.shbaseを実行します。基本環境で nacos を起動すると、データセット ソースなしエラーが報告されることがあります。これは、nacos のバックグラウンド設定ファイルが mysql に保存されており、nacos が以前にすでに起動されているためです。 mysqlが完全に開始されているため、構成ファイルのロードに失敗します。つまり、nacos を構成ファイルにロードして完全に正常に開始するには、mysql が正常に開始される必要があります。
3.バックエンド基本環境と3 つの主要なサービス モジュールを起動した後、コンテナが正常に起動するかどうかを確認します。( docker psコマンドを使用して、実行中のコンテナーに 4 つのバックエンド基本環境と 3 つの主要なサービス モジュール、合計 7 つのイメージと 7 つのコンテナーが含まれているかどうかを確認します。)
//1-进入登录脚本文件所在的文件夹
cd /opt/docker-compose/ruoyicloudplus/docker/sh2023731
//2-启动后端基础环境mysql redis nacos seata-server
//实际执行docker-compose up -d mysql redis nacos seata-server
sh deploy.sh base
//3-启动服务ruoyi-gateway ruoyi-auth ruoyi-system
//自动重新构建ruoyi-gateway和ruoyi-auth和ruoyi-system镜像和运行ruoyi-auth和ruoyi-system容器
//实际执行docker-compose up -d ruoyi-gateway ruoyi-auth ruoyi-system
sh deploy.sh services
sh2023731のdeploy.shスクリプトの内容
#!/bin/sh
# 使用说明,用来提示输入参数
usage(){
echo "Usage: sh 执行脚本.sh [base|services|stop|rm]"
exit 1
}
# 启动基础环境(必须)
base(){
docker-compose up -d mysql redis nacos seata-server
}
# 启动程序模块(必须)
services(){
docker-compose up -d ruoyi-gateway ruoyi-auth ruoyi-system
}
# 关闭所有环境/模块
stop(){
docker-compose stop
}
# 删除所有环境/模块
rm(){
docker-compose rm
}
# 根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"base")
base
;;
"services")
services
;;
"stop")
stop
;;
"rm")
rm
;;
*)
usage
;;
esac
3.4.3 3 つの主要なモジュール イメージを再構築し、3 つの主要なモジュール コンテナを起動するプロセスのスクリーンショット
3.4.4 検証コードの読み込み成功とコンソール文字化けの解決
注: 検証コードが表示されない場合は、バックエンド基本環境 mysql redis nacos Seata-server の特定のモジュール コンテナが正常に起動しなかった可能性があります。
ログインが成功すると、
Dubbo サービスが応答し、コンソール ruoyi-system が呼び出され、
システムが終了します。
3.4.5 すべてのモジュールコンテナを閉じる
すべてのモジュールコンテナコマンドを閉じる
【关闭所有模块】
//1-进入登录脚本文件所在的文件夹
cd /opt/docker-compose/ruoyicloudplus/docker/sh2023731
//2-启动关闭所有模块的脚本
//实际执行docker-compose stop
sh deploy.sh stop
#sh2023731中的deploy.sh脚本内容 相关内容
# 关闭所有环境/模块 2023-9-4 23:08:12
stop(){
docker-compose stop
}
すべてのモジュールコンテナのスクリーンショットを閉じる
すべてのモジュールを閉じる -shdeploy.sh stop - バックグラウンド ログ
3.5 sh apply.sh services スクリプト コマンドを使用して 3 つの主要プロジェクトのモジュール イメージを構築する原理
//3-启动服务ruoyi-gateway ruoyi-auth ruoyi-system
//自动重新构建ruoyi-gateway和ruoyi-auth和ruoyi-system镜像和运行ruoyi-auth和ruoyi-system容器
//实际执行docker-compose up -d ruoyi-gateway ruoyi-auth ruoyi-system
sh deploy.sh services
実際に実行されるのはdocker-compose コマンド docker-compose up -d ruoyi-gateway ruoyi-auth ruoyi-system で、docker-compose はイメージのビルドやコンテナの一括起動が可能です。
CentOS7 に docker と docker-compose をインストールして構成するには、CentOS7 に基づいた docker と docker-compose のインストールと構成に関する私の記事を参照してください。
1、安装好docker与docker-compose的环境。
2、配置好JDK镜像源。
3、编写三大模块的docker-compose.yml文件。
4、三大模块的docker-compose.yml中build参数用来构建镜像、dockerfile参数用来指定dockerfile
文件的位置。
5、Java -jar jar包名称 命令直接在容器中运行模块。
前面三大模块dockerfile中最后一行中出现的gateway.jar、auth.jar、system.jar
实际是后端通过maven打包生成的jar。
关于Java -jar具体看3.5 jar文件和脚本文件的说明
理解を容易にするために、原理を図に示します。(例としてゲートウェイ サービス モジュールを取り上げます。auth 認証および認可モジュールとシステム モジュールは同じです)
3.5 jarファイルとスクリプトファイルの説明
前の 3 つのモジュールの dockerfile の最後の行にあるgateway.jar、auth.jar、およびsystem.jar は、実際には Maven パッケージ化を通じてバックエンドによって生成された jarです。
3.5.1 Maven の依存関係を更新し、プロジェクトをクリーンにする
3.5.2 パッケージのパッケージング
3.5.3 copy.shの実行
Maven パッケージのパッケージ化によってデフォルトでモジュール名をjar パッケージの名前として使用します。
たとえば、ruoyi-gatewayモジュールをパッケージ化するときにデフォルトで生成される jar パッケージの名前はruoyi-gateway.jarです。
ruoyi-authモジュールがパッケージ化されるときにデフォルトで生成される jar パッケージの名前はruoyi-auth.jarです。
ruoyi-systemモジュールがパッケージ化されるときにデフォルトで生成される jar パッケージの名前はruoyi-gateway.jarです。
ここで、copy.sh スクリプトを記述して実行すると、これら 3 つの jar ファイルが対応するフォルダーにコピーされ、名前が変更されて簡略化されます。
#!/bin/bash
# 创建目标目录
#db存放sql源文件
mkdir -p ../mysql2023731/db2023731
#ruoyi-gateway 网关服务 (网关服务(RuoYiGatewayApplication)启动8080)
mkdir -p ../ruoyi2023731/gateway/jar
#ruoyi-auth 认证授权中心 (认证授权中心RuoYiAuthApplication启动9210)
mkdir -p ../ruoyi2023731/auth/jar
#系统模块RuoYiSystemApplication启动9201
mkdir -p ../ruoyi2023731/system/jar
# 复制sql文件 到/docker/mysql/db2023731文件夹中
echo "begin copy sql "
cp ../../sql/ry-cloud.sql ../mysql2023731/db2023731
cp ../../sql/ry-config.sql ../mysql2023731/db2023731
cp ../../sql/ry-job.sql ../mysql2023731/db2023731
cp ../../sql/ry-seata.sql ../mysql2023731/db2023731
cp ../../sql/test.sql ../mysql2023731/db2023731
echo "end copy sql "
# 复制jar文件
echo "begin copy jar "
cp ../../ruoyi-gateway/target/ruoyi-gateway.jar ../ruoyi2023731/gateway/jar/gateway.jar
cp ../../ruoyi-auth/target/ruoyi-auth.jar ../ruoyi2023731/auth/jar/auth.jar
cp ../../ruoyi-modules/ruoyi-system/target/ruoyi-system.jar ../ruoyi2023731/system/jar/system.jar
echo "end copy jar "
copy.sh を実行します。
system.jar
auth.jar
ゲートウェイ.jar
を実行します。 copy.sh スクリプト コマンドの分析を実行します。
3.6 ユーザーサービスを開始するための java -jar コマンド
3 つの主要モジュールの dockerfile の最後の行は、次のコマンド行で構成されています。
# 启动用户服务 网关服务
ENTRYPOINT ["java","-jar","gateway.jar"]
# 启动用户服务 认证授权中心服务
ENTRYPOINT ["java","-jar","auth.jar"]
# 启动用户服务 系统模块服务
ENTRYPOINT ["java","-jar","system.jar"]
ここで、 SpringBoot プロジェクトは実際にはjar パッケージとして直接デプロイされます。
詳細については、公式ドキュメント「実行可能 Jar の作成」を参照してください
。 1. まず、プロジェクトの pom.xml ファイルの依存関係に次の内容を追加します。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
ここでは例としてboot3-01-demoを取り上げます。
2. mvn package は、boot3-01-demo プロジェクト モジュールをパッケージ化します。
//1-maven打包
mvn package
Maven パッケージング コマンドmvn packageを実行すると、jar パッケージがターゲットディレクトリに表示されます。名前は
プロジェクト名-0.0.1-SNAPSHOT.jar、ここではboot3-01-demo-1.0-SNAPSHOT.jarです。
//2-如果想进一步查看,就执行 jar tvf命令
jar tvf target/boot3-01-demo-1.0-SNAPSHOT.jar
ターゲットディレクトリに、boot3-01-demo-1.0-SNAPSHOT.jar.originalという名前のはるかに小さいファイルが表示されるはずです。これは、Spring Boot の再パッケージ化前に Maven によって作成された元の jar ファイルです。
//3-运行
语法:java -jar jar文件名
java -jar boot3-01-demo-1.0-SNAPSHOT.jar
//4-停止
按ctrl c
ここで、 SpringBoot プロジェクトは実際にはjar パッケージとして直接デプロイされます。
詳細な紹介については、公式ドキュメント「実行可能 Jar の作成」を参照してください。