成果物需要部署到用户内网的童鞋应该都遇到过该问题:引入的maven依赖越来越多,jar包越来越大,我之间甚至见过一两个G的依赖,想改个代码换到现场测试,包传到现场要一二十分钟,真正实现了改代码两分钟分钟,部署一小时,为了避免该问题,此次我使用assembly进行打包,将自己的代码还有依赖彻底拆分开,另外,因为不想单独另外部署一套nginx,所以我打算将前端(vue2)打包后一起放在后端。前端文件为了方便后面替换,和application一起打包到外部config文件夹下,避免以后每次前端文件修改了,后端都要重新打包。

1、后端部分

最外层pom需要做如下修改:

1)、其中需要注意的是,启动类需要改成自己的

2)、还有以下部分,是为了将前端资源也打包进config文件夹下。

    <profiles><profile><id>local</id><properties><profileActive>local</profileActive></properties><activation><activeByDefault>false</activeByDefault></activation></profile><profile><id>dev</id><properties><profileActive>dev</profileActive></properties><activation><activeByDefault>true</activeByDefault></activation></profile><profile><id>test</id><properties><profileActive>test</profileActive></properties><activation><activeByDefault>false</activeByDefault></activation></profile><profile><id>uat</id><properties><profileActive>uat</profileActive></properties><activation><activeByDefault>false</activeByDefault></activation></profile><profile><id>prod</id><properties><profileActive>prod</profileActive></properties><activation><activeByDefault>false</activeByDefault></activation></profile></profiles><build><!-- 打包后的启动jar名称 --><finalName>Alarm2WechatService</finalName><resources><!-- 资源文件配置 --><resource><directory>${project.basedir}/src/main/resources</directory><filtering>true</filtering><includes><include>application.properties</include><include>application-${profileActive}.properties</include><include>mapper/**/*.xml</include>
<!--                    <include>static/**</include>--><include>templates/**</include><include>*.xml</include><include>*.properties</include><include>*.jks</include></includes><excludes><exclude>static/**</exclude></excludes></resource><!-- 添加不经过过滤的资源声明 --><resource><directory>${project.basedir}/src/main/resources</directory><filtering>false</filtering><includes><include>static/**</include></includes></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.1.0</version><configuration><archive><manifest><!-- 项目启动类 --><mainClass>com.w.alarm2wechat.Alarm2WechatServiceApplication</mainClass><!-- 依赖的jar的目录前缀 --><classpathPrefix>../lib</classpathPrefix><addClasspath>true</addClasspath></manifest></archive><includes><include>**/*.class</include>  <!-- 包含所有类文件 --><include>**/*.xml</include>   <!-- 包含XML配置文件 --></includes></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><layout>ZIP</layout><includes><!-- 项目启动jar包中排除依赖包 --><include><groupId>non-exists</groupId><artifactId>non-exists</artifactId></include></includes></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><version>3.1.0</version><executions><execution><phase>prepare-package</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>target/lib</outputDirectory><overWriteReleases>false</overWriteReleases><overWriteSnapshots>false</overWriteSnapshots><overWriteIfNewer>true</overWriteIfNewer><includeScope>compile</includeScope></configuration></execution></executions></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.1.0</version></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>${java.version}</source><target>${java.version}</target></configuration></plugin><!-- 打包时跳过测试 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><version>2.22.1</version><configuration><skipTests>true</skipTests></configuration></plugin><!-- 打包插件 --><plugin><artifactId>maven-assembly-plugin</artifactId><version>3.1.0</version><configuration><descriptors><descriptor>src/main/assembly/assembly.xml</descriptor></descriptors></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin></plugins></build>

main文件夹下需要新增assembly文件夹和assembly.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<assembly><!-- 可自定义,这里指定的是项目环境 --><!-- spring-boot-assembly-local-1.0.RELEASE.tar.gz  --><id>${profileActive}-${project.version}</id><!-- 打包的类型,如果有N个,将会打N个类型的包 --><formats><format>tar.gz</format><format>zip</format></formats><includeBaseDirectory>true</includeBaseDirectory><fileSets><!--0755->即用户具有读/写/执行权限,组用户和其它用户具有读写权限;0644->即用户具有读写权限,组用户和其它用户具有只读权限;--><!-- 将src/bin目录下的所有文件输出到打包后的bin目录中 --><fileSet><directory>${basedir}/src/bin</directory><outputDirectory>bin</outputDirectory><fileMode>0755</fileMode><includes><include>**.sh</include><include>**.bat</include></includes></fileSet><!-- 指定输出target/classes中的配置文件到config目录中 --><fileSet><directory>${basedir}/target/classes</directory><outputDirectory>config</outputDirectory><fileMode>0644</fileMode><includes><include>application.properties</include><include>application-${profileActive}.properties</include><include>mapper/**/*.xml</include><include>static/**</include><include>templates/**</include><include>*.xml</include><include>*.properties</include><include>*.jks</include></includes></fileSet><!-- 将第三方依赖打包到lib目录中 --><fileSet><directory>${basedir}/target/lib</directory><outputDirectory>lib</outputDirectory><fileMode>0755</fileMode></fileSet><!-- 将项目启动jar打包到boot目录中 --><fileSet><directory>${basedir}/target</directory><outputDirectory>boot</outputDirectory><fileMode>0755</fileMode><includes><include>${project.build.finalName}.jar</include></includes></fileSet><!-- 包含根目录下的文件 --><fileSet><directory>${basedir}</directory><includes><include>NOTICE</include><include>LICENSE</include><include>*.md</include></includes></fileSet></fileSets></assembly>

src下还要新建bin文件夹

文件夹下是工程启动脚本,需要注意的是 XXXXX 需要替换成自己实际的。

restart.sh

#! /bin/shell#======================================================================
# 项目重启shell脚本
# 先调用shutdown.sh停服
# 然后调用startup.sh启动服务
#
# author: geekidea
# date: 2018-12-2
#======================================================================# 项目名称
APPLICATION="XXXXX"# 停服
echo stop ${APPLICATION} Application...
sh shutdown.sh# 启动服务
echo start ${APPLICATION} Application...
sh startup.sh

shutdown.sh

#! /bin/shell#======================================================================
# 项目停服shell脚本
# 通过项目名称查找到PID
# 然后kill -9 pid
#
# author: geekidea
# date: 2018-12-2
#======================================================================# 项目名称
APPLICATION="XXXXX"# 项目启动jar包名称
APPLICATION_JAR="${APPLICATION}.jar"PID=$(ps -ef | grep "${APPLICATION_JAR}" | grep -v grep | awk '{ print $2 }')
if [[ -z "$PID" ]]
thenecho ${APPLICATION} is already stopped
elseecho kill  ${PID}kill -9 ${PID}echo ${APPLICATION} stopped successfully
fi

startup.bat

@echo off
rem ======================================================================
rem windows startup script
rem
rem author: geekidea
rem date: 2018-12-2
rem ======================================================================rem Open in a browser
start "" "http://localhost:18083/#/"rem startup jar
java -jar ../boot/XXXXX.jar --spring.config.location=../config/pause

startup.sh

#! /bin/shell#======================================================================
# 项目启动shell脚本
# boot目录: spring boot jar包
# config目录: 配置文件目录
# logs目录: 项目运行日志目录
# logs/spring-boot-assembly_startup.log: 记录启动日志
# logs/back目录: 项目运行日志备份目录
# nohup后台运行
#
# author: geekidea
# date: 2018-12-2
#======================================================================# 项目名称
APPLICATION="XXXXX"# 项目启动jar包名称
APPLICATION_JAR="${APPLICATION}.jar"# bin目录绝对路径
BIN_PATH=$(cd `dirname $0`; pwd)
# 进入bin目录
cd `dirname $0`
# 返回到上一级项目根目录路径
cd ..
# 打印项目根目录绝对路径
# `pwd` 执行系统命令并获得结果
BASE_PATH=`pwd`# 外部配置文件绝对目录,如果是目录需要/结尾,也可以直接指定文件
# 如果指定的是目录,spring则会读取目录中的所有配置文件
CONFIG_DIR=${BASE_PATH}"/config/"# 项目日志输出绝对路径
LOG_DIR=${BASE_PATH}"/logs"
LOG_FILE="${APPLICATION}.log"
LOG_PATH="${LOG_DIR}/${LOG_FILE}"
# 日志备份目录
LOG_BACK_DIR="${LOG_DIR}/back/"# 项目启动日志输出绝对路径
LOG_STARTUP_PATH="${LOG_DIR}/${APPLICATION}_startup.log"# 当前时间
NOW=`date +'%Y-%m-%m-%H-%M-%S'`
NOW_PRETTY=`'date +%Y-%m-%m %H:%M:%S'`# 启动日志
STARTUP_LOG="================================================ ${NOW_PRETTY} ================================================\n"# 如果logs文件夹不存在,则创建文件夹
if [[ ! -d "${LOG_DIR}" ]]; thenmkdir "${LOG_DIR}"
fi# 如果logs/back文件夹不存在,则创建文件夹
if [[ ! -d "${LOG_BACK_DIR}" ]]; thenmkdir "${LOG_BACK_DIR}"
fi# 如果项目运行日志存在,则重命名备份
if [[ -f "${LOG_PATH}" ]]; thenmv ${LOG_PATH} "${LOG_BACK_DIR}/${APPLICATION}_back_${NOW}.log"
fi# 创建新的项目运行日志
echo "" > ${LOG_PATH}# 如果项目启动日志不存在,则创建,否则追加
echo "${STARTUP_LOG}" >> ${LOG_STARTUP_PATH}#==========================================================================================
# JVM Configuration
# -Xmx256m:设置JVM最大可用内存为256m,根据项目实际情况而定,建议最小和最大设置成一样。
# -Xms256m:设置JVM初始内存。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存
# -Xmn512m:设置年轻代大小为512m。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。
#          持久代一般固定大小为64m,所以增大年轻代,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
# -XX:MetaspaceSize=64m:存储class的内存大小,该值越大触发Metaspace GC的时机就越晚
# -XX:MaxMetaspaceSize=320m:限制Metaspace增长的上限,防止因为某些情况导致Metaspace无限的使用本地内存,影响到其他程序
# -XX:-OmitStackTraceInFastThrow:解决重复异常不打印堆栈信息问题
#==========================================================================================
JAVA_OPT="-server -Xms256m -Xmx256m -Xmn512m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=256m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"#=======================================================
# 将命令启动相关日志追加到日志文件
#=======================================================# 输出项目名称
STARTUP_LOG="${STARTUP_LOG}application name: ${APPLICATION}\n"
# 输出jar包名称
STARTUP_LOG="${STARTUP_LOG}application jar name: ${APPLICATION_JAR}\n"
# 输出项目bin路径
STARTUP_LOG="${STARTUP_LOG}application bin  path: ${BIN_PATH}\n"
# 输出项目根目录
STARTUP_LOG="${STARTUP_LOG}application root path: ${BASE_PATH}\n"
# 打印日志路径
STARTUP_LOG="${STARTUP_LOG}application log  path: ${LOG_PATH}\n"
# 打印JVM配置
STARTUP_LOG="${STARTUP_LOG}application JAVA_OPT : ${JAVA_OPT}\n"# 打印启动命令
STARTUP_LOG="${STARTUP_LOG}application background startup command: nohup java ${JAVA_OPT} -jar ${BASE_PATH}/boot/${APPLICATION_JAR} --spring.config.location=${CONFIG_DIR} > ${LOG_PATH} 2>&1 &\n"#======================================================================
# 执行启动命令:后台启动项目,并将日志输出到项目根目录下的logs文件夹下
#======================================================================
nohup java ${JAVA_OPT} -jar ${BASE_PATH}/boot/${APPLICATION_JAR} --spring.config.location=${CONFIG_DIR} > ${LOG_PATH} 2>&1 &# 进程ID
PID=$(ps -ef | grep "${APPLICATION_JAR}" | grep -v grep | awk '{ print $2 }')
STARTUP_LOG="${STARTUP_LOG}application pid: ${PID}\n"# 启动日志追加到启动日志文件中
echo -e ${STARTUP_LOG} >> ${LOG_STARTUP_PATH}
# 打印启动日志assembly
echo -e ${STARTUP_LOG}# 打印项目日志
tail -f ${LOG_PATH}

application.properties需要新增如下配置

spring.web.resources.static-locations=file:../config/static/
spring.mvc.static-path-pattern=/static/**

另外需要新增配置类WebConfig

如果不新增配置类,上面的spring.web.resources.static-locations=file:../config/static/不会生效,导致404。

package com.w.config;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.resource.PathResourceResolver;@Controller
public class WebConfig implements ErrorController {private static final Logger LOGGER = LoggerFactory.getLogger(WebConfig.class);// 注入配置文件中的路径@Value("${spring.web.resources.static-locations}")private String[] staticLocations;private static final String PATH = "/error";@RequestMapping(value = PATH)public String error() {return "forward:/index.html";}@Beanpublic WebMvcConfigurer webMvcConfigurer() {return new WebMvcConfigurer() {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 添加字体文件类型支持registry.addResourceHandler("/**").addResourceLocations(staticLocations).setCachePeriod(3600).resourceChain(true).addResolver(new PathResourceResolver());}};}
}

2、前端部分

router下的index.js,主要修改红框部分

const router = new VueRouter({mode: 'history',base: '/XXXX/', // 必须与publicPath保持一致routes
})

vue.config.js文件

修改前的代码

调整后的代码

const path = require('path');
function resolve(dir) {return path.join(__dirname, dir);
}
module.exports = {publicPath: '/XXXX/', // 新增公共路径lintOnSave: false,devServer: {port: 18083,publicPath: '/XXXX/', // 保持与publicPath一致historyApiFallback: {rewrites: [{ from: /^\/XXXX/, to: '/XXXX/index.html' } // 修正重写规则]},proxy:{'/alarmWechat':{target: 'http://localhost:18082',changeOrigin: true,pathRewrite: {'^/XXXX': '' // 移除接口路径中的/alarmWechat}}}},configureWebpack: {devtool: 'source-map',optimization: {minimize: false}},chainWebpack(config) {config.module.rule('svg').exclude.add(resolve('src/icons')).end()config.module.rule('icons').test(/\.svg$/).include.add(resolve('src/icons')).end().use('svg-sprite-loader').loader('svg-sprite-loader').options({symbolId: 'icon-[name]'}).end()}
};

3、结果

1、clean package后,target下会生成zip文件,解压开,文件如下。执行bin下脚本即可启动工程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/89723.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/89723.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/89723.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于PHP+MySQL实现(Web)英语学习与测试平台

数据库课设&#xff1a;英语学习与测试平台 运行环境要求 PHP7.1 基于 thinkPHP6.0、Layui、Xadmin 开发 主要功能 公共模块 登录注册个人信息修改密码修改 教师模块 文章查看发布班级管理测试查看发布批改历史成绩查看 学生模块 文章查看参与测试查看成绩 管理员模块…

WinForm中Settings.settings和app.config修改后信息不同步到exe.config问题

在 WinForms 项目中&#xff0c;Settings.settings 和 app.config/exe.config 的关系确实容易让人困惑。以下是问题的根本原因和解决方案&#xff1a; 问题本质 设计时文件&#xff1a;app.config&#xff08;源码中的配置文件&#xff09;运行时文件&#xff1a;bin/Debug/Yo…

【公司环境下发布个人NPM包完整教程】

&#x1f3e2; 公司环境下发布个人NPM包完整教程 创建时间: 2025年7月2日 适用场景: 公司电脑&#xff0c;需要临时切换个人账户发布npm包 &#x1f3af; 教程概述 场景说明 环境: 公司电脑&#xff0c;已配置公司npm账户目标: 临时使用个人账户发布npm包&#xff0c;发布后恢复…

渗透测试中 phpinfo() 的信息利用分析

在渗透测试中&#xff0c;phpinfo() 是一个非常常见却极具价值的信息泄露点。这个函数的本意是向开发者展示当前 PHP 环境的详细配置情况&#xff0c;包括编译选项、扩展模块、环境变量、系统信息、目录路径等。然而一旦该页面被暴露到互联网上&#xff0c;攻击者便可以借此收集…

《如何在 Spring 中实现 MQ 消息的自动重连:监听与发送双通道策略》

大家好&#xff0c;我是G探险者&#xff01;&#x1f4cc; 背景场景在高可用分布式系统中&#xff0c;我们经常面临&#xff1a;MQ 集群重启 → 消息监听中断MQ 网络短暂抖动 → 发送端连接失败一端恢复正常&#xff0c;另一端仍处于挂死状态如果你只配置了“连接工厂层”的重连…

OpenCV 安装使用教程

一、OpenCV 简介 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源计算机视觉和机器学习软件库&#xff0c;提供了超过 2500 个优化的算法&#xff0c;用于实时图像处理、视频分析、对象识别、人脸检测、机器学习等任务。 Python 提供了对 Open…

【SNN脉冲神经网络3】HH神经元软件仿真

本篇文章主要核心目的在于研究明白HH神经元的数学模型&#xff0c;并且验证其正确性。因此&#xff0c;在本篇文章中只会使用numpy函数库用于构建神经元&#xff0c;以及matplotlib用于绘图。1.导入对应的库import numpy as np import matplotlib.pyplot as plt import re impo…

「日拱一码」014 Python常用库——Pandas

目录 数据结构 pandas.Series &#xff1a;一维数组&#xff0c;类似于数组&#xff0c;但索引可以是任意类型&#xff0c;而不仅仅是整数 pandas.DataFrame &#xff1a;二维表格型数据结构&#xff0c;类似于 Excel 表格&#xff0c;每列可以是不同的数据类型 数据读取与写…

狂命爆肝21天,共51K字的JAVA学习笔记奉上,JAVA从入门到精通一文搞定,一文在手JAVA无忧

背景知识 Java 相关概念 JavaSE (Java Standard Edition): 基础版&#xff0c;用于开发桌面应用程序。JavaEE (Java Enterprise Edition): 企业版&#xff0c;用于开发企业级应用程序。JavaME (Java Micro Edition): 微型版&#xff0c;用于开发嵌入式系统和移动设备应用程序…

Dijkstra 算法#图论

Dijkstra 算法 算法前提&#xff1a;在没有负边的情况下使用。算法思路&#xff1a;将结点分成已确定最短路长度的点集 S 和未确定最短路长度的点集 T&#xff0c;每次从 T 集合中选取最短路长度最小的结点移到 S 集合中&#xff0c;并对其出边执行更新操作 从T集合中&#x…

开源与闭源大模型的生态与技术对比:以百度文心4.5开源为视角

技术对比&#xff1a;开源与闭源大模型的优劣势 性能对比&#xff1a;算力效率与场景适配的博弈 在模型性能的竞技场上&#xff0c;开源与闭源大模型呈现出明显的差异化特征。以百度文心4.5开源系列为例&#xff0c;其47B参数的混合专家&#xff08;MoE&#xff09;模型在飞桨…

企业电商解决方案哪家好?ZKmall模块商城全渠道支持 + 定制化服务更省心

在数字化浪潮席卷各行各业的当下&#xff0c;企业要想拓展市场、提升竞争力&#xff0c;搭建专属电商平台已经成了绕不开的选择。但市场上的电商解决方案五花八门&#xff0c;怎么才能挑到真正适合自己的&#xff1f;其实道理很简单&#xff1a;能同时搞定全渠道支持和定制化服…

使用哪种语言的人更容易通过面试?

Ruby 和 Swift&#xff01;似乎语言越大众面试通过率越低&#xff0c;毕竟岗位数量有限&#xff0c;Java 和 C 程序员所面对的竞争也会更加激烈。使用 Ruby 和 Swift 的程序员比例到底怎么样&#xff1f;我们可以从 Google Trends 中发现一些蛛丝马迹。最火热的 Java 的热度平均…

Axios 二次封装高级教程(含请求取消等功能)

Axios 二次封装高级教程&#xff08;含请求取消等功能&#xff09; 整理不易&#xff0c;收藏、点赞、关注哦&#xff01; 一、总体架构设计 目的&#xff1a;构建一套功能完善、易用且健壮的 HTTP 请求封装层 核心功能&#xff1a; 请求拦截、响应拦截请求取消&#xff08;防…

MobileNet V1的Pytorch实现并加载预训练模型进行验证

一. 环境 windonws 11RTX5060CUDA 12.8Pytorch 2.9.0dev20250630cu128torchvision 0.23.0dev20250701cu128 二. 代码 基于Mobilenet-CustomData 的Mobilenet_Pretrain.ipynb 1. 定义Mobile Net V1 import os import time import torch import torch.nn as nn import torch…

HTTP协议利用TCP的特性来实现长连接

在讨论网络协议时,经常会有人提出这样一个问题:“既然HTTP是基于TCP的,而TCP本身支持长连接,为什么HTTP不支持长连接?”这种说法其实是一种误解。实际上,HTTP确实可以并且经常使用长连接(也称为持久连接)。 什么是长连接? 首先,我们需要明确什么是“长连接”。在网…

整流电路Multisim电路仿真实验汇总——硬件工程师笔记

目录 1 整流电路基础 1.1 整流电路基本原理 1.2 整流电路的类型 1.2.1 单相整流电路 1.2.2 三相整流电路 1.3 整流电路的应用 1.3.1 直流电源 1.3.2 电池充电器 1.3.3 变频调速系统 1.34 电解和电镀 1.4 整流电路的优缺点 1.4.1 优点 1.4.2 缺点 2 二极管整流电路…

LangChain 全面入门

什么是 LangChain&#xff1f; LangChain 是一个专门为 大语言模型 (LLM) 应用开发设计的开源框架&#xff0c;帮你快速实现&#xff1a; • 多轮对话 • 知识库问答 (RAG) • 多工具协同调用 (function calling / tool) • 智能体 Agent 自动决策任务链 解耦 LLM 接口、Prom…

RabbitMQ 高级特性之消息确认

1. 简介 RabbitMQ 的消息发送流程&#xff1a; producer 将消息发送给 broker&#xff0c;consumer 从 broker 中获取消息并消费 那么在这里就涉及到了两种消息发送&#xff0c;即 producer 与 broker 之间和 consumer 与 broker 之间。 “消息确认” 讨论的是 consumer 与…

【51单片机用数码管显示流水灯的种类是按钮控制数码管加一和流水灯】2022-6-14

缘由 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64}; //共阴0~F消隐减号 unsigned char Js0, miao0;//中断计时 秒 分 时 毫秒 sbit k0P3^0; sbit k1P3^1; void smxs(u…