当前位置: 首页 > news >正文

搞定Apache Superset

踩雷了无数次终于解决了Superset的一系列问题

现在是北京时间2023年12月27日,亲测有效。

Superset概述

Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接各种数据源,包括很多现代的大数据分析引擎,拥有丰富的图表展示形式,并且支持自定义仪表盘。

特别注意:

下面的教程所使用的服务器操作系统为CentOS 7,Superset对接的数据源为MySQL数据库。

Superset官网地址:Welcome | Superset

安装Python环境

Superset是由Python语言编写的Web应用,要求Python3.7以上的环境。

安装Miniconda

conda是一个开源的包、环境管理器,可以用于在同一个机器上安装不同Python版本的软件包及其依赖,并能够在不同的Python环境之间切换,Anaconda包括Conda、Python以及一大堆安装好的工具包,比如:numpy、pandas等,Miniconda包括Conda、Python。

此处,我们不需要如此多的工具包,故选择MiniConda。

下载Miniconda(Python3版本)

下载地址:https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh

安装Miniconda

(1)执行以下命令进行安装,并按照提示操作,直到安装完成。

[zhangxi@hadoop102 lib]$ bash Miniconda3-latest-Linux-x86_64.sh

(2)在安装过程中,出现以下提示时,可以指定安装路径 /opt/module/miniconda3

(3)出现以下字样,即为安装完成

3)加载环境变量配置文件,使之生效

[zhangxi@hadoop102 lib]$ source ~/.bashrc

4)取消激活base环境

Miniconda安装完成后,每次打开终端都会激活其默认的base环境,我们可通过以下命令,禁止激活默认base环境。

[zhangxi@hadoop102 lib]$ conda config --set auto_activate_base false

创建Python3.8环境

1)配置conda国内镜像(此处可不配置,国外镜像比清华镜像更快)

(base) [zhangxi@hadoop102 ~]$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
(base) [zhangxi@hadoop102 ~]$ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
(base) [zhangxi@hadoop102 ~]$ conda config --set show_channel_urls yes

查看conda的镜像channel配置

[zhangxi@hadoop102 ~]$ conda config --show channels- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free- defaults

删除清华镜像,继续用默认的

[zhangxi@hadoop102 ~]$ conda config --remove-key channels
[zhangxi@hadoop102 ~]$ conda config --show channels- defaults

2)创建Python3.8环境

(base) [zhangxi@hadoop102 ~]$ conda create --name superset python=3.8.16

说明:conda环境管理常用命令

创建环境:conda create -n env_name

查看所有环境:conda info --envs

删除一个环境:conda remove -n env_name --all

3)激活superset环境

(base) [zhangxi@hadoop102 ~]$ conda activate superset

激活后效果如下图所示

说明:退出当前环境

(superset) [zhangxi@hadoop102 ~]$ conda deactivate

4)执行python -V命令查看python版本

(superset) [zhangxi@hadoop102 ~]$ python -V
Python 3.8.16

Superset部署

安装依赖

安装Superset之前,需安装以下所需依赖。

(superset) [zhangxi@hadoop102 ~]$ sudo yum install -y gcc gcc-c++ libffi-devel python-devel python-pip python-wheel python-setuptools openssl-devel cyrus-sasl-devel openldap-devel

安装Superset

1)更新pip

(superset) [zhangxi@hadoop102 ~]$ pip install --upgrade pip -i https://pypi.douban.com/simple/

说明:pip是python的包管理工具,可以和centos中的yum类比

2)安装Supetset

vim base.txt文件至任意路径,添加以下内容

aiohttp==3.8.1# via slackclient
aiosignal==1.2.0# via aiohttp
alembic==1.6.5# via flask-migrate
amqp==5.1.0# via kombu
apispec[yaml]==3.3.2# via flask-appbuilder
async-timeout==4.0.2# via aiohttp
attrs==21.2.0# via#   aiohttp#   jsonschema
babel==2.9.1# via flask-babel
backoff==1.11.1# via apache-superset
billiard==3.6.4.0# via celery
bleach==3.3.1# via apache-superset
brotli==1.0.9# via flask-compress
cachelib==0.4.1# via apache-superset
celery==5.2.2# via apache-superset
cffi==1.14.6# via cryptography
charset-normalizer==2.0.4# via aiohttp
click==8.0.4# via#   apache-superset#   celery#   click-didyoumean#   click-plugins#   click-repl#   flask#   flask-appbuilder
click-didyoumean==0.3.0# via celery
click-plugins==1.1.1# via celery
click-repl==0.2.0# via celery
colorama==0.4.4# via#   apache-superset#   flask-appbuilder
convertdate==2.3.2# via holidays
cron-descriptor==1.2.24# via apache-superset
croniter==1.0.15# via apache-superset
cryptography==3.4.7# via apache-superset
deprecation==2.1.0# via apache-superset
dnspython==2.1.0# via email-validator
email-validator==1.1.3# via flask-appbuilder
flask==2.0.3# via#   apache-superset#   flask-appbuilder#   flask-babel#   flask-caching#   flask-compress#   flask-jwt-extended#   flask-login#   flask-migrate#   flask-sqlalchemy#   flask-wtf
flask-appbuilder==4.1.3# via apache-superset
flask-babel==1.0.0# via flask-appbuilder
flask-caching==1.10.1# via apache-superset
flask-compress==1.10.1# via apache-superset
flask-jwt-extended==4.3.1# via flask-appbuilder
flask-login==0.4.1# via flask-appbuilder
flask-migrate==3.1.0# via apache-superset
flask-sqlalchemy==2.5.1# via#   flask-appbuilder#   flask-migrate
flask-talisman==0.8.1# via apache-superset
flask-wtf==0.14.3# via#   apache-superset#   flask-appbuilder
frozenlist==1.3.0# via#   aiohttp#   aiosignal
func-timeout==4.3.5# via apache-superset
geographiclib==1.52# via geopy
geopy==2.2.0# via apache-superset
graphlib-backport==1.0.3# via apache-superset
gunicorn==20.1.0# via apache-superset
hashids==1.3.1# via apache-superset
holidays==0.10.3# via apache-superset
humanize==3.11.0# via apache-superset
idna==3.2# via#   email-validator#   yarl
isodate==0.6.0# via apache-superset
itsdangerous==2.1.1# via#   flask#   flask-wtf
jinja2==3.0.3# via#   flask#   flask-babel
jsonschema==3.2.0# via flask-appbuilder
kombu==5.2.4# via celery
korean-lunar-calendar==0.2.1# via holidays
mako==1.1.4# via alembic
markdown==3.3.4# via apache-superset
markupsafe==2.0.1# via#   jinja2#   mako#   wtforms
marshmallow==3.13.0# via#   flask-appbuilder#   marshmallow-enum#   marshmallow-sqlalchemy
marshmallow-enum==1.5.1# via flask-appbuilder
marshmallow-sqlalchemy==0.23.1# via flask-appbuilder
msgpack==1.0.2# via apache-superset
multidict==5.1.0# via#   aiohttp#   yarl
numpy==1.22.1# via#   apache-superset#   pandas#   pyarrow
packaging==21.3# via#   bleach#   deprecation
pandas==1.3.4# via apache-superset
parsedatetime==2.6# via apache-superset
pgsanity==0.2.9# via apache-superset
polyline==1.4.0# via apache-superset
prison==0.2.1# via flask-appbuilder
prompt-toolkit==3.0.28# via click-repl
pyarrow==5.0.0# via apache-superset
pycparser==2.20# via cffi
pyjwt==2.4.0# via#   apache-superset#   flask-appbuilder#   flask-jwt-extended
pymeeus==0.5.11# via convertdate
pyparsing==3.0.6# via#   apache-superset#   packaging
pyrsistent==0.16.1# via jsonschema
python-dateutil==2.8.2# via#   alembic#   apache-superset#   croniter#   flask-appbuilder#   holidays#   pandas
python-dotenv==0.19.0# via apache-superset
python-editor==1.0.4# via alembic
python-geohash==0.8.5# via apache-superset
pytz==2021.3# via#   babel#   celery#   convertdate#   flask-babel#   pandas
pyyaml==5.4.1# via#   apache-superset#   apispec
redis==3.5.3# via apache-superset
selenium==3.141.0# via apache-superset
simplejson==3.17.3# via apache-superset
six==1.16.0# via#   bleach#   click-repl#   flask-talisman#   holidays#   isodate#   jsonschema#   polyline#   prison#   pyrsistent#   python-dateutil#   sqlalchemy-utils#   wtforms-json
slackclient==2.5.0# via apache-superset
sqlalchemy==1.3.24# via#   alembic#   apache-superset#   flask-appbuilder#   flask-sqlalchemy#   marshmallow-sqlalchemy#   sqlalchemy-utils
sqlalchemy-utils==0.37.8# via#   apache-superset#   flask-appbuilder
sqlparse==0.3.0# via apache-superset
tabulate==0.8.9# via apache-superset
typing-extensions==3.10.0.0# via apache-superset
urllib3==1.26.6# via selenium
vine==5.0.0# via#   amqp#   celery#   kombu
wcwidth==0.2.5# via prompt-toolkit
webencodings==0.5.1# via bleach
werkzeug==2.0.3# via#   flask#   flask-jwt-extended
wtforms==2.3.3# via#   flask-appbuilder#   flask-wtf#   wtforms-json
wtforms-json==0.3.3# via apache-superset
yarl==1.6.3# via aiohttp# The following packages are considered to be unsafe in a requirements file:
# setuptools

查看文件

(superset) [zhangxi@hadoop102 ~]$ ll ~
总用量 12
-rw-r--r--. 1 zhangxi zhangxi 5795 2月   3 15:27 base.txt
drwxrwxr-x. 2 zhangxi zhangxi 4096 2月   6 11:42 bin

该文件可用于指定superset依赖组件及版本,下载地址及内容如下。

https://raw.githubusercontent.com/apache/superset/2.0.0/requirements/base.txt

在base.txt所在目录下执行如下命令,安装SuperSet

(superset) [zhangxi@hadoop102 ~]$ pip install apache-superset==2.0.0 -i https://pypi.tuna.tsinghua.edu.cn/simple -r base.txt

说明:

  • -i的作用是指定镜像,这里选择国内镜像

  • -r的作用是指定superset依赖组件及相应版本,指向base.txt文件即可

配置Superset元数据库

Superset的元数据支持MySQL、PostgreSQL,此处采用MySQL。

1)在MySQL中创建superset元数据库

mysql> CREATE DATABASE superset DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

2)创建superset用户

mysql> create user superset@'%' identified WITH mysql_native_password BY 'superset';
mysql> grant all privileges on *.* to superset@'%' with grant option;
mysql> flush privileges;

3)修改superset配置文件

(superset) [zhangxi@hadoop102 ~]$ vim /opt/module/miniconda3/envs/superset/lib/python3.8/site-packages/superset/config.py

修改内容如下:(184、185行)

# SQLALCHEMY_DATABASE_URI = "sqlite:///" + os.path.join(DATA_DIR, "superset.db")
SQLALCHEMY_DATABASE_URI = 'mysql://superset:superset@hadoop102:3306/superset?charset=utf8'

4)安装python msyql驱动

(superset) [zhangxi@hadoop102 ~]$ conda install mysqlclient

5)初始化superset元数据

(superset) [zhangxi@hadoop102 ~]$ export FLASK_APP=superset
(superset) [zhangxi@hadoop102 ~]$ superset db upgrade

SupersetSet初始化

1)创建管理员用户

(superset) [zhangxi@hadoop102 ~]$ superset fab create-admin

2)初始化superset

(superset) [zhangxi@hadoop102 ~]$ superset init

启动Supterset

1)安装gunicorn

(superset) [zhangxi@hadoop102 ~]$ pip install gunicorn -i https://pypi.douban.com/simple/

说明:gunicorn是一个Python Web Server,可以和java中的Tomcat类比

2)启动Superset

确保当前conda环境为superset,及下图所示

启动

(superset) [zhangxi@hadoop102 ~]$ gunicorn --workers 5 --timeout 120 --bind hadoop102:8787  "superset.app:create_app()" --daemon

说明:

  • --workers:指定进程个数
  • --timeout:worker进程超时时间,超时会自动重启
  • --bind:绑定本机地址,即为Superset访问地址
  • --daemon:后台运行

登录Superset

访问http://hadoop102:8787

3)停止superset

(1)停掉gunicorn进程

(superset) [zhangxi@hadoop102 ~]$ ps -ef | awk '/superset/ && !/awk/{print $2}' | xargs kill -9

(2)退出superset环境

(superset) [zhangxi@hadoop102 ~]$ conda deactivate

superset启停脚本

1)创建superset.sh文件

[zhangxi@hadoop102 bin]$ vim superset.sh

内容如下

#!/bin/bashsuperset_status(){result=`ps -ef | awk '/gunicorn/ && !/awk/{print $2}' | wc -l`if [[ $result -eq 0 ]]; thenreturn 0elsereturn 1fi
}
superset_start(){source ~/.bashrcsuperset_status >/dev/null 2>&1if [[ $? -eq 0 ]]; thenconda activate superset ; gunicorn --workers 5 --timeout 120 --bind hadoop102:8787 --daemon 'superset.app:create_app()'elseecho "superset正在运行"fi}superset_stop(){superset_status >/dev/null 2>&1if [[ $? -eq 0 ]]; thenecho "superset未在运行"elseps -ef | awk '/gunicorn/ && !/awk/{print $2}' | xargs kill -9fi
}case $1 instart )echo "启动Superset"superset_start;;stop )echo "停止Superset"superset_stop;;restart )echo "重启Superset"superset_stopsuperset_start;;status )superset_status >/dev/null 2>&1if [[ $? -eq 0 ]]; thenecho "superset未在运行"elseecho "superset正在运行"fi
esac

2)加执行权限

[zhangxi@hadoop102 bin]$ chmod +x superset.sh

3)测试

启动superset

[zhangxi@hadoop102 bin]$ superset.sh start

停止superset

[zhangxi@hadoop102 bin]$ superset.sh stop

关于Apache Superset的使用后续讲解

相关文章:

搞定Apache Superset

踩雷了无数次终于解决了Superset的一系列问题 现在是北京时间2023年12月27日,亲测有效。 Superset概述 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用,可对接各种数据源,包括很多现代的大数据分析引擎&#xff…...

【每日试题】java面试之ssm框架

以下是20道常见的SSM(SpringSpring MVCMyBatis)面试题目和答案: 什么是SSM框架? SSM是指SpringSpring MVCMyBatis的组合,它是Java Web开发中常用的轻量级框架集合。 介绍一下SSM框架各个组件的作用? Sprin…...

Flutter 疑难杂症集合

一. Flutter集成uni小程序sdk 1. 手机连接电脑测试打开uni小程序没问题,打包成apk后debug编译下的apk也没问题,但就是release编译的apk包打不开小程序。 报错情景:点击后页面会闪现一下黑色的背景,然后又跳转回了点击之前的页面。…...

PHP序列化总结1--序列化和反序列化的基础知识

序列化和反序列化的作用 1.序列化:将对象转化成数组或者字符串的形式 2.反序列化:将数组或字符串的形式转化为对象 为什么要进行序列化 这种数据形式中间会有很多空格,不同人有不同的书写情况,可能还会出现换行的情况 为此为了…...

【Linux】 last 命令使用

last 命令 用于检索和展示系统中用户的登录信息。它从/var/log/wtmp文件中读取记录,并将登录信息按时间顺序列出。 著者 Miquel van Smoorenburg 语法 last [-R] [-num] [ -n num ] [-adiox] [ -f file ] [name...] [tty...]last 命令 -Linux手册页 选项及作用…...

Git 分布式版本控制系统(序章1)

第一章 Git 分布式版本控制系统 为什么学Git? 某些企业面试需要掌握Git,同时,也方便管理自己的Qt项目。 一、Git 客户端下载(Windows) 下载地址 https://gitee.com/all-about-git#git-%E5%A4%A7%E5%85%A8 二、Git 的特点 分支…...

给WordPress网站添加返回顶部按钮

给WordPress网站底部添加一个按钮,点它就可以现实快速返回到顶部。有两种方法可以现实,一种是通过安装相关插件来实现。另外一种方式就是以纯属代码的方式来实现。 给WordPress网站底部添加一个按钮,点它就可以现实快速返回到顶部。有两种方…...

App Inventor 2 接入短信服务,实现短信验证码功能

发送短信验证码功能一般都是基于短信平台提供的sdk进行调用,这里是基于阿里云短信平台进行的开发,阿里云短信平台接入步骤请点此参考。 App Inventor 2拓展提供的函数如下: 主要提供2个函数,生成随机位数的数字随机码 和 发送短信…...

Linux环境grep搜索方法记录

1 grep grep 命令,用来搜索字符串所在位置,可以具体到不同文件,不同行; 在Linux 下,查看命令释义如下 zhaocubuntu2004:~$ grep --help Usage: grep [OPTION]... PATTERNS [FILE]... Search for PATTERNS in each FI…...

C语言-破解密码

题目描述 密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。 假设老王原来一个BBS上的密码为zvbo941987,为了方便记忆,他通过一种算法把这个密码变换…...

ffmpeg 解码文件时的时间戳问题

实时流和普通文件 1 实时流 实时流编码时,我们一般不进行b帧编码,但是文件存储时为了减小大小,会增加b帧,实时流只带了I,P帧,那就会好很多 2 普通文件 很多文件带了b帧,所以要使用解码时间去同…...

Java企业电子招投标系统源代码,支持二次开发,采用Spring cloud框架

在数字化采购领域,企业需要一个高效、透明和规范的管理系统。通过采用Spring Cloud、Spring Boot2、Mybatis等先进技术,我们打造了全过程数字化采购管理平台。该平台具备内外协同的能力,通过待办消息、招标公告、中标公告和信息发布等功能模块…...

[python]基于faster whisper实时语音识别语音转文本

语音识别转文本相信很多人都用过,不管是手机自带,还是腾讯视频都附带有此功能,今天简单说下: faster whisper地址: https://github.com/SYSTRAN/faster-whisperhttps://link.zhihu.com/?targethttps%3A//github.com…...

2023纠结中前行? 2024继续还是放下?

喝下2023年的第一口雪碧,没有想像中的那么期待,甜水,放弃吧;还是吃些水果吧,不行吃块肉、喝两口酒~ 关于生活 挣扎了10几年的一颗牙“终于“掉了,几个月时间都在为新牙努力着;”进了医院就不在…...

原型链补充

1.什么是原型对象 函数的独有属性,他用prototype来表示,可以在函数的prototype上挂载一些公用的属性和方法,供实例化对象来访问。 2.__proto__属性 这个属性每一个对象都有,实例化对象就是通过这个属性,来访问原型对象上的属性和方法的。 3.三者之间的关系 1.在构造函数的原型…...

《Linux Nano命令详解:小而强大的文本编辑器》

《Linux Nano命令详解:小而强大的文本编辑器》 引言: 在Linux系统中,文本编辑是开发和系统管理中不可或缺的一部分。虽然有许多强大的文本编辑器可供选择,但Nano以其简单易用、小巧灵活而备受喜爱。本文将深入探讨Nano命令&…...

系列四、Eureka自我保护

一、Eureka自我保护 1.1、故障现象 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据,也就是不会注销任何微服务。如…...

C++回调函数-实操(二)

回调通常通过函数指针、函数对象&#xff08;仿函数&#xff09;、Lambda 表达式或者 std::function 来实现。 1、函数指针实现回调 这一方法实现回调比较好记&#xff0c;就记住把函数当作参数传给方法&#xff0c;在方法中调用方法。 #include <iostream>// 回调函数…...

MySQL中常用的用户授权操作

mysql 用户授权 1 &#xff09;概述 让每个应用程序&#xff0c;单独开一个mysql的用户权限所有mysql用户存储在 mysql库的user表中 2 ) 多种用户授权方式示例 show databases; use mysql;select user, authentication_string, host from mysql.user;-- 创建和删除用户 -- c…...

LabVIEW开发智能火灾自动报警系统

LabVIEW开发智能火灾自动报警系统 系统基于LabVIEW虚拟仪器开发&#xff0c;由火灾报警控制器、感温感烟探测器、手动报警器、声光报警器、ZigBee无线通讯节点以及上位机电脑等组成&#xff0c;展示了LabVIEW在智能化火灾预警与控制方面的应用。该系统通过结合二总线协议和Zig…...

Java 语言特性(面试系列2)

一、SQL 基础 1. 复杂查询 &#xff08;1&#xff09;连接查询&#xff08;JOIN&#xff09; 内连接&#xff08;INNER JOIN&#xff09;&#xff1a;返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

PHP 8.5 即将发布:管道操作符、强力调试

前不久&#xff0c;PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5&#xff01;作为 PHP 语言的又一次重要迭代&#xff0c;PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是&#xff0c;借助强大的本地开发环境 ServBay&am…...

五子棋测试用例

一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏&#xff0c;有着深厚的文化底蕴。通过将五子棋制作成网页游戏&#xff0c;可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家&#xff0c;都可以通过网页五子棋感受到东方棋类…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...