Windows环境下Tomcat版本升级全流程与避坑指南
1. 项目缘起为什么要在Windows上折腾Tomcat版本在Windows环境下做Java Web开发尤其是接手老项目或者进行技术栈升级时更换Tomcat版本几乎是每个开发者都会遇到的“必修课”。这听起来简单不就是下载一个新包替换一下路径吗但实际操作过的人都知道这里面的坑远比想象的多。你可能遇到过新版本Tomcat启动后项目报500错误或者日志里一堆ClassNotFound又或者端口被莫名占用甚至环境变量配置好了但服务死活注册不上。这些问题的根源往往不在于Tomcat本身而在于Windows这个特定环境与Java生态结合时产生的那些“特性”。我自己就曾在一个企业级项目迁移中因为从Tomcat 8.5升级到9.0被一个关于JAR包扫描的细微配置差异卡了大半天。表面上看两个版本的server.xml和web.xml格式几乎一样但内部类加载机制和对某些Servlet API特性的支持已经有了变化。在Linux上可能通过一两个命令就能平滑过渡的问题在Windows上却可能因为路径分隔符、服务注册表、进程残留等问题变得异常棘手。因此这篇内容的目的就是把我这些年积累的、针对Windows平台更换Tomcat版本的完整流程、核心原理和避坑经验系统地梳理出来。这不是一篇简单的“下载-解压-配置”三步走教程而是一个资深开发者视角下的深度操作手册旨在让你不仅能完成更换更能理解每一个步骤背后的“为什么”从而在遇到任何意外时都能从容应对。2. 更换前的深度评估与准备工作在动手更换Tomcat版本之前盲目操作是最大的风险。一个周全的评估和准备阶段能避免80%的后续问题。这个阶段的核心是搞清楚“我们从哪里来要到哪里去”以及“路上可能会遇到什么”。2.1 明确更换动机与版本选择首先必须明确你更换Tomcat版本的根本原因。这决定了你的目标版本和迁移策略。安全漏洞与官方支持结束这是最硬性的要求。例如Tomcat 8.5.x的某个分支已停止维护存在已知高危漏洞。此时目标版本应选择当前受支持的、最稳定的次新版本如Tomcat 9.0.x的最新稳定版而不是盲目追求最新的Tomcat 10其Servlet API从4.0升级到5.0可能带来不兼容性。项目依赖特性需求新项目需要使用Tomcat 9或10才支持的Servlet 4.0特性如HTTP/2、服务器推送等。此时需要评估现有应用代码是否兼容新API。性能优化与Bug修复为了解决当前版本下某个特定的性能瓶颈或已确认的Bug。你需要精确查阅Tomcat官方的版本更新日志Changelog确认目标版本确实包含了相关的修复或优化。统一环境与规范化公司或团队为了统一开发、测试、生产环境而进行的版本标准化。版本选择建议对于大多数生产环境我个人的建议是遵循“奇数版本谨慎偶数版本优先”的潜规则尽管Tomcat不严格遵循并始终选择该分支下最新的稳定版Stable Release而不是最新的测试版。例如目前Tomcat 9.0.x是长期稳定分支而Tomcat 10.0.x引入了较大的API变化。从Tomcat 8.5迁移到9.0是相对平滑的而从9.0迁移到10.0则需要评估代码的兼容性成本。2.2 全面侦察现有环境在下载新版本之前你必须对现有Tomcat环境了如指掌。我习惯创建一个检查清单Checklist当前版本详情进入现有Tomcat的bin目录运行catalina version命令Linux下是./catalina.sh version。这会精确输出Tomcat版本、JVM版本、构建信息等。记录下这些信息。安装目录结构与自定义项核心配置重点备份conf目录下的所有文件尤其是server.xml,web.xml,context.xml。但注意不要直接覆盖到新版本而是用于对比。应用部署目录确认webapps目录下有哪些应用是自动部署的。记录下除了ROOT之外的所有目录名。库文件检查lib目录下是否有项目依赖的、非Tomcat标准的JAR包如数据库驱动、特定的连接池实现如Druid、安全框架jar等。这些是迁移的关键。日志目录logs目录的位置和配置在conf/logging.properties中定义。工作目录work和temp目录的位置通常存放编译后的JSP和临时文件。启动方式与系统集成服务启动如果Tomcat是作为Windows服务安装的通过service.bat安装你需要记录服务名称。在“运行”中输入services.msc查找类似Tomcat8或Apache Tomcat的服务。环境变量检查系统环境变量CATALINA_HOME和CATALINA_BASE是否设置以及JAVA_HOME的指向。CATALINA_HOME指向Tomcat安装根目录CATALINA_BASE指向实例目录如果设置了的话通常用于多实例部署。端口配置记录server.xml中配置的HTTP/1.1 Connector端口默认为8080、AJP端口默认为8009、Shutdown端口默认为8005以及可能的HTTPS端口。项目依赖分析检查你部署的Web项目WAR包或展开目录的WEB-INF/lib下的库以及WEB-INF/web.xml中定义的Servlet版本。确保目标Tomcat版本支持的Servlet API版本不低于项目所需版本。例如一个使用了Servlet 3.1特性的项目可以运行在Tomcat 8.0上但一个为Servlet 4.0Tomcat 9开发的项目无法在Tomcat 8上运行。2.3 准备新版本与备份策略完成侦察后开始准备新环境官方渠道下载务必从Apache Tomcat官方网站tomcat.apache.org下载所需版本。选择“Core”下的zip包如apache-tomcat-9.0.xx-windows-x64.zip即可这是最干净的二进制发行版。避免从第三方网站下载以防捆绑或篡改。规划安装目录建议将新版本的Tomcat解压到一个全新的目录例如D:\Servers\apache-tomcat-9.0.xx。绝对不要直接解压覆盖旧版本目录。新旧目录并存是安全回滚的保障。完整备份旧版本将整个旧的Tomcat目录复制一份到安全位置。此外单独备份conf,webapps,lib自定义库这几个关键目录。创建迁移记录文档新建一个文本文件开始记录你的每一步操作、遇到的每一个问题及解决方案。这在复杂的迁移中是无价之宝。3. 分步迁移从文件到配置的精细操作准备工作就绪后我们进入核心的迁移操作阶段。这个过程讲究的是“循序渐进步步为营”。3.1 基础文件与目录迁移首先处理那些相对独立、风险较低的部分部署应用程序将旧webapps目录下你的应用程序目录如myapp或WAR文件复制到新Tomcat的webapps目录下。如果旧webapps下有ROOT目录即默认根应用也需要一并迁移但要注意新Tomcat的webapps/ROOT下可能有默认页面你可以选择覆盖或先重命名备份。迁移第三方库将旧lib目录下所有非Tomcat自带的JAR包你在上一步侦察中记录的复制到新Tomcat的lib目录下。关键点不要复制Tomcat自身的JAR包如servlet-api.jar,tomcat-*.jar这些应由新版本提供混用可能导致严重的类加载冲突。迁移共享资源如果应用使用了Tomcat外部的资源如通过server.xml中Context标签的docBase指向的磁盘路径或者使用了Resource定义的JNDI资源确保这些路径在新环境下依然有效。3.2 核心配置文件迁移与对比这是最容易出错的部分绝不能直接复制粘贴。必须采用“对比-合并”的策略。使用对比工具推荐使用Beyond Compare、WinMerge或VSCode的对比功能。将新旧两个conf目录进行对比。重点处理server.xml端口号直接修改新server.xml中的Connector port为你旧环境使用的端口如8080。同时检查shutdown端口默认为8005是否冲突。连接器配置对比Connector节点的属性。新版本可能会增加、废弃或修改某些属性。例如Tomcat 9在HTTP/1.1连接器上可能增加了关于relaxedPathChars和relaxedQueryChars的配置用于处理非标准字符。你需要将旧配置中自定义的属性如maxThreads,connectionTimeout,compression等合并到新配置的对应节点中而不是替换整个节点。上下文与资源定义如果旧server.xml中有自定义的Context或Resource如数据源将这些定义整体复制到新server.xml的Host或GlobalNamingResources部分。注意检查资源依赖的JAR驱动是否已放入lib。关闭server.xml中的示例应用新Tomcat的server.xml中可能会默认注释掉一个指向webapps/examples的Context确保它被注释掉除非你需要。谨慎处理web.xml这是所有Web应用的部署描述符模板。通常除非你在旧Tomcat的conf/web.xml中为所有应用添加了全局的过滤器、监听器或参数否则建议优先使用新版本自带的web.xml。因为Tomcat版本升级可能会在此文件中更新默认的MIME类型映射、会话配置等。如果确有全局自定义内容只将自定义的那部分filter,filter-mapping,listener,context-param等片段合并到新文件中。其他配置文件context.xml全局上下文设置、tomcat-users.xml管理用户、catalina.properties类加载器设置等同样采用对比合并的方式。对于logging.properties如果你没有特殊修改使用新的即可如果有自定义的日志格式或路径则合并你的修改。3.3 Windows服务与启动脚本配置如果你的旧Tomcat是作为服务运行的这是Windows平台特有的关键步骤。移除旧服务可选但推荐在安装新服务前最好先卸载旧服务避免服务名冲突。进入旧Tomcat的bin目录以管理员身份运行命令行执行service.bat remove或者在命令中指定服务名service.bat remove Tomcat8。配置新服务进入新Tomcat的bin目录。首先编辑service.bat文件虽然不推荐直接改但我们可以通过参数配置。更规范的做法是在命令行中通过参数来安装服务。以管理员身份打开CMD切换到新Tomcat的bin目录下service.bat install [服务名]例如service.bat install Tomcat9。这会使用service.bat和tomcat9.exe等文件注册一个名为Tomcat9的Windows服务。关键配置setenv.bat这是Tomcat在Windows上用于设置自定义环境变量的脚本。如果旧Tomcat的bin目录下有setenv.bat或setenv.sh你需要将其复制到新Tomcat的bin目录下并根据新环境进行调整。这个文件通常用于设置JAVA_OPTSJVM参数如堆内存大小-Xms512m -Xmx1024m、垃圾回收器、调试参数、文件编码-Dfile.encodingUTF-8等。CATALINA_OPTSTomcat容器自身的参数。一个常见坑如果旧setenv.bat中设置了CATALINA_HOME或CATALINA_BASE请确保其路径指向的是新Tomcat的目录否则服务启动时会加载错误的类库。服务参数配置安装服务后可以通过Windows的“服务”管理控制台或sc命令来配置服务的启动账户、恢复策略等。特别是如果Tomcat需要访问网络资源或特定磁盘路径可能需要将其服务登录账户从“本地系统账户”更改为一个有相应权限的域账户。4. 启动验证与深度排错指南配置完成后不要急于启动服务。先进行控制台测试再过渡到服务启动。4.1 控制台启动测试这是排查问题最直接的方式。打开命令行进入新Tomcat的bin目录。执行startup.bat。此时会弹出一个新的命令行窗口显示Tomcat的启动日志。仔细观察启动日志成功标志最后几行看到类似Server startup in [xxxx] milliseconds的提示。错误排查端口占用如果看到Address already in use: JVM_Bind说明端口8080, 8005等被占用。用netstat -ano | findstr :8080找到占用进程的PID在任务管理器中结束它或者修改server.xml中的端口号。类加载错误如ClassNotFoundException或NoClassDefFoundError。这通常是因为自定义的JAR包没有正确放入lib目录。项目WEB-INF/lib下的库与Tomcatlib下的库版本冲突。需要排查依赖。setenv.bat中设置的CLASSPATH有误。配置文件语法错误XML文件格式错误如标签未闭合、属性值引号不匹配。日志会指出错误发生在哪个文件的哪一行。权限问题如果日志显示无法写入logs、work或temp目录可能是Windows用户权限不足。确保Tomcat进程有对这些目录的读写权限。访问测试浏览器打开http://localhost:8080应该能看到Tomcat的默认主页。然后访问你的应用如http://localhost:8080/myapp进行完整的功能测试。4.2 服务启动与稳定性测试控制台测试通过后再进行服务测试。在服务管理控制台找到新安装的服务如Tomcat9尝试启动。服务启动失败排查如果服务启动失败状态显示“启动后停止”查看Windows事件查看器这是Windows服务排错的神器。打开“事件查看器” - “Windows日志” - “应用程序”。查找来源为“Tomcat9”或“Java”的错误事件里面的错误信息通常比Tomcat自身的日志更早、更底层能揭示JVM启动失败、setenv.bat脚本执行错误等问题。检查Tomcat日志即使服务没起来Tomcat也会尝试写日志。查看新Tomcatlogs目录下的catalina.yyyy-mm-dd.log文件对应日期的日志和localhost.yyyy-mm-dd.log文件。服务账户权限确保服务配置的账户有权限读取Tomcat目录、执行Java以及写入日志目录。可以尝试暂时将服务登录账户改为“本地系统账户”测试是否是权限问题。压力与内存测试服务启动成功后模拟用户操作对应用进行一段时间的访问。同时使用jconsoleJDK自带或VisualVM连接到Tomcat进程需要配置JAVA_OPTS开启JMX观察内存堆内存、非堆内存的变化趋势看是否有内存泄漏的迹象。特别是从低版本升级到高版本JVM和容器的内存管理行为可能有细微差别。4.3 版本升级特有的兼容性问题不同Tomcat主版本间可能存在一些行为变更需要特别注意Tomcat 8.5 到 9.0相对平滑。主要注意Servlet API从3.1升级到4.0但大部分应用兼容。需关注web.xml头部声明的版本是否更新。另外Tomcat 9默认启用HTTP/1.1的allowedTrailerFields对某些非常规客户端可能有影响。Tomcat 9 到 10这是重大升级。Servlet API从4.0升级到5.0Jakarta EE命名空间从javax.*改为jakarta.*。这意味着所有直接或间接依赖Servlet API的代码包括你的应用代码和第三方库都需要使用兼容Jakarta EE 9的版本。对于大多数现有项目这不是简单的替换JAR包就能解决的可能需要重新编译项目。因此除非项目已进行Jakarta EE适配否则从Tomcat 9升级到10需要非常谨慎的评估和代码改造。日志框架依赖Tomcat内部使用的日志实现如JULI可能随版本变化。如果你的应用使用了commons-logging,slf4j等桥接到Tomcat内部日志需要检查桥接JAR的兼容性。5. 回滚方案与生产环境上线清单即使测试顺利也必须为生产环境的操作准备好回滚方案。5.1 制定可靠的回滚计划备份至上在操作生产环境前确保旧Tomcat的完整目录、所有配置文件、数据库连接信息等都已备份并且备份是有效的可以通过在备用机器上恢复测试。并行部署如果条件允许不要直接替换而是采用并行部署。即在新目录安装配置好新版本Tomcat并启动在另一个端口如8081进行最终验证。验证无误后再通过修改负载均衡配置或直接切换端口的方式将流量切到新服务。旧服务保持运行一段时间以备快速回切。快速回滚脚本准备一个简单的脚本或明确的步骤清单用于在出现严重问题时快速停止新服务、恢复旧服务配置、启动旧服务。这个脚本应该经过预演。5.2 生产环境上线检查清单在最终切流前逐项核对以下清单[ ] 新旧版本所有自定义JAR包已正确迁移且版本兼容。[ ]server.xml,web.xml等核心配置文件已完成对比合并无语法错误且关键参数端口、线程池、超时等符合生产要求。[ ]setenv.bat中的JVM参数尤其是堆内存大小、GC策略已根据生产环境负载优化调整。[ ] Windows服务已正确安装并以适当权限的账户运行且服务启动类型自动/手动设置正确。[ ] 防火墙规则已更新允许新Tomcat进程或端口通信。[ ] 所有部署的应用程序功能测试通过包括核心业务流程、文件上传下载、会话保持、外部接口调用等。[ ] 监控系统如Zabbix, Prometheus的Agent或配置已更新能够正确监控新Tomcat实例的健康状态、性能指标TPS、响应时间、错误率、JVM内存等。[ ] 日志聚合系统如ELK的配置已更新能够收集新logs目录下的日志文件。[ ] 团队内部文档如运维手册、部署指南已更新反映新的Tomcat版本和部署路径。完成以上所有步骤一次Windows服务器上的Tomcat版本更换才算真正稳妥地完成。这个过程考验的不仅是技术更是耐心和细致。记住在服务器环境里变化总是伴随着风险而充分的准备和清晰的回滚路径是你最可靠的安全带。

相关新闻

工业机器人坐标系全解析:从基座标到TCP,六大坐标系原理与应用实战

工业机器人坐标系全解析:从基座标到TCP,六大坐标系原理与应用实战

1. 项目概述:为什么工业机器人需要这么多坐标系? 刚入行那会儿,调试第一台六轴机器人,老师傅让我把工具中心点(TCP)移到工件的一个角点上。我拿着示教器,对着机械臂上下左右一顿操作&#xff0c…

2026/8/17 10:19:27 阅读更多 →
Callback参数安全测试:从JSONP原理到XSS漏洞挖掘与防御

Callback参数安全测试:从JSONP原理到XSS漏洞挖掘与防御

1. 从一次“无害”的Callback请求说起 最近在做一个金融类应用的渗透测试,客户反复强调他们的前端做了严格的输入过滤和CSP策略,常规的反射型XSS和存储型XSS测试都无功而返。就在准备收工,写报告说明“前端安全防护良好”时,我习惯…

2026/8/18 12:34:00 阅读更多 →
TP-LINK WiFi7 AC+AP组网全解析:从企业级架构到家庭部署实战

TP-LINK WiFi7 AC+AP组网全解析:从企业级架构到家庭部署实战

最近在给家里升级网络时,很多朋友都遇到了一个两难选择:是继续用Mesh路由器“缝缝补补”,还是咬咬牙一步到位上企业级的ACAP方案?前者简单但覆盖和性能总有短板,后者专业但总觉得是公司里才用的东西,配置起…

2026/8/18 12:38:49 阅读更多 →

最新新闻

公共接口安全怎么用,HTTPS 与密钥管理避坑指南

公共接口安全怎么用,HTTPS 与密钥管理避坑指南

从“能跑”到“稳跑”:公共接口集成的安全深水区 在快速原型开发阶段,很多开发者面对 public-apis 这类资源丰富的开源项目时,往往只关注“哪个接口能返回数据”或者"QPS 限制是多少”。只要代码跑通,应用能展示天气、货币汇…

2026/8/18 14:50:17 阅读更多 →
Claude Code中MCP工具链式调用失效的调试与设计优化

Claude Code中MCP工具链式调用失效的调试与设计优化

1. 从一次“工具调用中断”的调试说起 最近在深度集成Claude Code到我的开发工作流时,遇到了一个让我卡壳很久的问题。我写了一个MCP(Model Context Protocol)服务器,用来连接内部的项目管理系统,让Claude Code能帮我查…

2026/8/18 14:50:17 阅读更多 →
多类型节点渲染:RecyclerTreeView 如何同时展示文件夹与文件(附完整代码)

多类型节点渲染:RecyclerTreeView 如何同时展示文件夹与文件(附完整代码)

多类型节点渲染:RecyclerTreeView 如何同时展示文件夹与文件(附完整代码) 【免费下载链接】RecyclerTreeView TreeView implement in Android with RecyclerView. 项目地址: https://gitcode.com/gh_mirrors/re/RecyclerTreeView 在 A…

2026/8/18 14:50:17 阅读更多 →
四千多个免费接口怎么挑,Public APIs 分类检索技巧

四千多个免费接口怎么挑,Public APIs 分类检索技巧

面对四千多个免费接口,很多开发者的第一反应不是兴奋,而是“选择困难症”。在 public-apis 这个开源项目中,收录了超过 140 个分类、数千个 API 资源。从动物图片到加密货币行情,从天气预报到机器学习模型,资源确实丰富…

2026/8/18 14:50:17 阅读更多 →
Claude模型版本管理实战:避免API调用失效与客户端兼容性问题

Claude模型版本管理实战:避免API调用失效与客户端兼容性问题

在实际 AI 开发与集成工作中,我们经常需要调用 Claude 等大语言模型的 API。一个看似简单却极易引发问题的环节,就是模型版本的管理。你是否遇到过这样的场景:昨天还能正常运行的代码,今天突然返回 "deepseek-v4-pro" …

2026/8/18 14:50:17 阅读更多 →
番茄小说永久保存攻略:fanqienovel-downloader离线下载全流程详解

番茄小说永久保存攻略:fanqienovel-downloader离线下载全流程详解

番茄小说永久保存攻略:fanqienovel-downloader离线下载全流程详解 【免费下载链接】fanqienovel-downloader 下载番茄小说 项目地址: https://gitcode.com/gh_mirrors/fa/fanqienovel-downloader 你有没有过这样的时刻:追了半年的小说&#xff0c…

2026/8/18 14:49:16 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻:设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →