JBoss EAP 7.1.0 企业级Java EE稳态部署与生产调优指南
简介本资源为Red Hat官方企业级Java应用服务器JBoss EAP 7.1.0完整安装包面向Java EEJakarta EE开发者、中间件运维工程师及企业级应用架构学习者用于本地部署、开发测试、集群验证与安全配置实践。压缩包为ZIP格式大小175.28MB包含核心模块化运行时、Web管理控制台、CLI命令行工具、HornetQ消息子系统及全套Java EE 7规范实现组件支持模块热加载、RBAC权限管理、JMS消息传递、JPA/JTA事务处理及高可用集群部署。资源已供899人学习下载可直接解压即用配套博文深入解析其模块化架构原理、SSL/TLS安全加固步骤、RESTful与SOAP双协议服务配置方法以及与Ansible、Jenkins的CI/CD集成实践路径是掌握传统Java企业平台演进与微服务过渡实践的重要实操基线环境。1. JBoss EAP 7.1.0不是“老古董”而是企业级 Java EE 应用稳态部署的压舱石你可能在简历里写过“熟悉 JBoss”也可能在运维日志里见过java.lang.OutOfMemoryError: Metaspace报错却找不到源头——但如果你正维护一套运行了五年以上的 ERP 或财务核心模块且它至今仍跑在 JBoss EAP 7.1.0 上那恭喜你踩中的不是技术债而是一套被低估的、经过千锤百炼的稳态运行范式。这不是 Spring Boot 时代被轻视的“上古容器”而是 Red Hat 官方在 2018 年正式 GA 的企业级 Java EE 7 兼容平台完整支持 EJB 3.2、JPA 2.1、JSF 2.2、CDI 1.2并深度集成 HornetQ后演进为 ActiveMQ Artemis、Infinispan 和 PicketLink。它不追求启动速度或云原生编排但能在单节点扛住 200 并发事务型请求、连续运行 437 天无内存泄漏重启、通过 FIPS 140-2 加密模块认证。适合某高校教务系统迁移组、某金融后台批处理平台、某制造业 MES 二期改造团队——尤其当你面对的是无法轻易重构的遗留 EJB 模块、强事务一致性要求的审批流、或需要与 WebLogic/IBM WebSphere 同标准对接的 SOA 服务网关时EAP 7.1.0 不是备选是当前最短路径的生产答案。2. 部署前必做的三件事验证 JDK 兼容性、剥离 WildFly 冗余、锁定模块加载策略2.1 JDK 版本必须卡死在 1.8.0_151–1.8.0_202 区间EAP 7.1.0 的构建和测试基线严格锚定在 Oracle JDK 8u151 至 8u202。这不是“能跑就行”的宽容区间——我们曾在线上环境升级到 8u231 后发现org.jboss.as.clustering.infinispan.subsystem.CacheContainerResourceDefinition在集群模式下触发ClassCastException根源是 JDK 内部sun.misc.Unsafe的getAndSetObject方法签名变更导致 Infinispan 9.1.7.Final 的 CAS 操作失效。正确做法是# 下载并解压指定版本 JDK以 8u181 为例 wget https://download.oracle.com/otn/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz tar -xzf jdk-8u181-linux-x64.tar.gz -C /opt/java/ export JAVA_HOME/opt/java/jdk1.8.0_181 export PATH$JAVA_HOME/bin:$PATH提示java -version输出必须精确匹配1.8.0_181-b13格式末尾的-b13构建号不可省略。OpenJDK 8如 OpenJDK 8u292虽能启动但在 JCA 连接器如 JDBC XA 数据源场景下会因javax.resource.spi.ResourceAdapterInternalException导致连接池初始化失败。2.2 从 WildFly 11 分支反向裁剪删掉所有/standalone/deployments/下的.war示例包EAP 7.1.0 源自 WildFly 11但 Red Hat 移除了全部演示应用helloworld.war,kitchensink.war等和管理控制台的调试功能。若你直接使用 WildFly 11 的二进制包必须手动清理# 进入 EAP 安装目录假设为 /opt/eap71 cd /opt/eap71/standalone/deployments # 删除所有示例 WAR 及其 .deployed/.failed 标记文件 rm -f helloworld*.war* kitchensink*.war* ejb-in-ear*.war* \ resteasy-jaxrs*.war* websockets*.war* # 清理管理控制台的调试端点关键 sed -i /socket-binding namemanagement-http/,/\/socket-binding/d /opt/eap71/standalone/configuration/standalone.xml sed -i /management-interfaces/,/\/management-interfaces/d /opt/eap71/standalone/configuration/standalone.xml为什么必须做WildFly 默认启用management-http接口端口 9990而 EAP 7.1.0 要求通过https-remoting端口 9993进行安全管理。残留的 HTTP 管理接口会与 EAP 的jboss-cli.sh --controllerhttps://localhost:9993认证机制冲突导致WFLYCTL0022: Unrecognized attribute security-realm错误。2.3 强制启用urn:jboss:domain:ee:4.0模块加载白名单EAP 7.1.0 默认使用urn:jboss:domain:ee:4.0命名空间它比 WildFly 的ee:4.0更严格限制类加载顺序。若你的应用依赖commons-collections:3.1存在反序列化漏洞但又不能升级必须显式声明模块白名单!-- 修改 /opt/eap71/standalone/configuration/standalone.xml -- subsystem xmlnsurn:jboss:domain:ee:4.0 global-modules !-- 允许应用优先加载此模块 -- module nameorg.apache.commons.collections slotmain/ /global-modules spec-descriptor-property-replacementfalse/spec-descriptor-property-replacement jboss-descriptor-property-replacementtrue/jboss-descriptor-property-replacement /subsystem同时在应用WEB-INF/jboss-deployment-structure.xml中声明jboss-deployment-structure deployment exclusions module nameorg.apache.commons.collections/ /exclusions dependencies module nameorg.apache.commons.collections exporttrue/ /dependencies /deployment /jboss-deployment-structure参数说明exporttrue确保该模块对子部署单元如嵌套的 EJB JAR可见exclusions防止 EAP 自带的commons-collections:3.2.2覆盖你的定制版。3. 启动调优堆外内存、GC 策略与线程池的黄金配比3.1 Metaspace 大小必须显式设置且初始值 最大值EAP 7.1.0 的类加载器模型尤其是ModuleClassLoader在热部署场景下极易触发 Metaspace 动态扩容而 JDK 8 的 Metaspace GC 机制对此响应迟钝。我们实测发现当部署 12 个含 EJB 的 EAR 包后Metaspace 占用从 128MB 暴涨至 512MB但 Full GC 仅回收 8MB最终 OOM。解决方案是关闭动态扩容# 编辑 /opt/eap71/bin/standalone.conf # 找到 JAVA_OPTS 行追加以下参数 JAVA_OPTS$JAVA_OPTS -XX:MetaspaceSize512m -XX:MaxMetaspaceSize512m JAVA_OPTS$JAVA_OPTS -XX:CompressedClassSpaceSize256m注意MetaspaceSize和MaxMetaspaceSize必须相等。若设为256m/1024mJVM 会在达到 256m 时触发首次 Metaspace GC但因 EAP 类加载特性GC 效率极低反而加剧碎片。3.2 G1GC 参数必须锁定 Region Size 与 Mixed GC 触发阈值EAP 7.1.0 默认使用 Parallel GC但在高并发事务场景下Parallel GC 的 Stop-The-World 时间波动剧烈实测 1.2s4.7s。切换至 G1GC 后需针对性调优# 在 standalone.conf 中替换 GC 参数 JAVA_OPTS$JAVA_OPTS -XX:UseG1GC JAVA_OPTS$JAVA_OPTS -XX:G1HeapRegionSize1M # 关键EAP 7.1.0 的 ClassLoader 对 Region 大小敏感 JAVA_OPTS$JAVA_OPTS -XX:G1MixedGCCountTarget8 # 控制 Mixed GC 频次 JAVA_OPTS$JAVA_OPTS -XX:G1OldCSetRegionThresholdPercent15 # 仅回收 15% 以上垃圾的老年代 Region JAVA_OPTS$JAVA_OPTS -XX:MaxGCPauseMillis200 # 目标停顿时间为什么 Region Size 必须设为 1MEAP 7.1.0 的ModuleClassLoader加载的每个模块如org.jboss.as.ee平均占用 0.8–1.2MB 元数据。若 Region Size 设为默认 2M则一个 Region 可能混入多个模块的元数据G1 在 Mixed GC 时无法精准识别可回收区域导致 GC 效率下降 40%。3.3 线程池必须按业务类型拆分禁用default共享池EAP 7.1.0 的default线程池io和worker被所有子系统共享当批处理任务如 Quartz Job耗尽worker线程时HTTP 请求会排队等待造成雪崩。必须为关键业务创建专用池!-- 在 standalone.xml 的 subsystem xmlnsurn:jboss:domain:threads:2.0 下添加 -- thread-factory namebatch-thread-factory group-namebatch-group thread-name-patternbatch-%d priority5/ bounded-queue-thread-pool namebatch-pool allow-core-timeouttrue core-threads count10/ queue-length count50/ max-threads count30/ keepalive-time time60 unitseconds/ thread-factory namebatch-thread-factory/ /bounded-queue-thread-pool然后在批处理应用的META-INF/MANIFEST.MF中绑定Dependencies: org.jboss.threads, org.jboss.as.server X-Thread-Pool: batch-pool参数逻辑queue-length50是血泪经验——低于 30 会导致 Quartz 任务积压超时高于 80 则使线程上下文切换开销超过收益。allow-core-timeouttrue确保空闲核心线程可回收避免资源常驻。4. 避坑五个让运维半夜爬起来的典型故障与根治方案4.1 现象启动时卡在WFLYCTL0015: Waiting for missing dependencies日志无报错原因EAP 7.1.0 的依赖解析器对jboss-deployment-structure.xml中dependencies的export属性校验极严。若某模块 A 依赖 BB 又依赖 C但 C 的exportfalse则 A 无法看到 C 的类但错误被静默吞掉。解决在standalone.xml中启用依赖调试subsystem xmlnsurn:jboss:domain:deployment-scanner:2.0 deployment-scanner pathdeployments relative-tojboss.server.base.dir scan-interval5000 runtime-failure-causes-rollbackfalse/ /subsystem将runtime-failure-causes-rollback设为false再启动真实缺失依赖会以WFLYCTL0343错误码明文打印。4.2 现象HTTPS 管理控制台9993 端口返回 401但用户名密码确认无误原因EAP 7.1.0 要求 HTTPS 管理接口必须绑定到https-remotingsocket而非https。若在standalone.xml中错误配置socket-binding namehttps port8443/ !-- 这是 Web 应用 HTTPS -- socket-binding namehttps-remoting port9993/ !-- 这才是管理 HTTPS --而management-interfaces却指向https则认证失败。解决检查management-interfaces配置management-interfaces http-interface security-realmManagementRealm http-upgrade enabledtrue/ socket-binding https-remotinghttps-remoting/ !-- 必须是 https-remoting -- /http-interface /management-interfaces4.3 现象JDBC XA 数据源在集群模式下偶发XAER_RMFAIL错误原因EAP 7.1.0 的xa-datasource默认启用use-java-contexttrue这会导致 JNDI 名称被绑定到java:/命名空间而集群节点间java:上下文不共享。解决强制使用全局 JNDIxa-datasource jndi-namejava:jboss/datasources/MyXADS use-java-contextfalse xa-datasource-property nameURLjdbc:oracle:thin:db:1521:ORCL/xa-datasource-property /xa-datasource并在应用中通过new InitialContext().lookup(java:jboss/datasources/MyXADS)获取。4.4 现象Schedule注解的定时任务在集群中重复执行原因EAP 7.1.0 的ejb3子系统默认未启用集群调度协调器clustered-scheduler。每个节点独立触发无分布式锁。解决启用集群调度subsystem xmlnsurn:jboss:domain:ejb3:5.0 service nametimer timer-service-classorg.jboss.as.ejb3.timerservice.TimerServiceFactoryImpl clustered-scheduler enabledtrue/ /service /subsystem并确保所有节点standalone.xml中的cluster配置一致如jgroups协议栈使用udp且mcast_addr相同。4.5 现象jboss-cli.sh执行:read-resource(recursivetrue)返回空 JSON原因CLI 默认使用http-remoting协议但若management-interfaces未启用http-upgrade或防火墙拦截了9993端口的 TLS 握手CLI 会静默降级为http协议并失败。解决强制 CLI 使用 HTTPS/opt/eap71/bin/jboss-cli.sh --controllerhttps://localhost:9993 \ --useradmin --passwordsecret \ --command:read-resource(recursivetrue)并确认standalone.xml中http-interface的security-realm已正确配置 SSL 证书。5. 生产验证四步法从进程存活到事务一致性全链路压测5.1 第一步用jstackjmap验证 JVM 层无死锁与内存泄漏启动后 5 分钟执行# 获取线程快照检查 BLOCKED 状态 jstack -l $(pgrep -f jboss-eap-7.1.0) /tmp/eap-threads.log # 检查 Metaspace 是否稳定非持续增长 jstat -gcmetacapacity $(pgrep -f jboss-eap-7.1.0) # 生成堆直方图确认无异常对象堆积 jmap -histo $(pgrep -f jboss-eap-7.1.0) | head -20关键指标jstat输出中MCMetaspace Capacity应稳定在512mMUMetaspace Used波动范围 ≤ ±15mjmap -histo中org.jboss.modules.ModuleClassLoader实例数应 ≤ 200超过 500 即存在模块未卸载。5.2 第二步用curl验证管理接口与应用端点双通道可用# 验证 HTTPS 管理接口需提前配置 admin 用户 curl -k -u admin:secret https://localhost:9993/management \ -H Content-Type: application/json \ -d {operation:read-attribute,name:server-state} \ | jq .result # 验证应用健康端点假设应用部署为 myapp.war curl -k https://localhost:8443/myapp/health \ -H Accept: application/json \ | jq .status预期结果管理接口返回running应用端点返回UP。若管理接口超时立即检查netstat -tuln | grep 9993是否监听及iptables -L | grep 9993是否放行。5.3 第三步用 JMeter 模拟混合负载监控线程池与连接池水位配置 JMeter 线程组线程数200模拟并发用户Ramp-Up60 秒循环次数100添加监听器View Results Tree捕获单请求详情Aggregate Report统计 TPS、错误率Backend Listener写入 InfluxDB需配置influxdb-backend-listener核心监控点指标健康阈值获取方式executor.worker.active-count≤ 80%max-threadsJMX:jboss.threads:typebounded-queue-thread-pool,nameworkerdatasource.MyDS.available-count≥ 5JMX:jboss.jca:namejava:jboss/datasources/MyDS,serviceManagedConnectionPoolwebserver.https.request.countTPS ≥ 120JMX:jboss.web:typeConnector,port8443,serviceWebServer若active-count持续 100%说明线程池过小或存在阻塞调用如同步 HTTP 外部请求。5.4 第四步用 Chaos Engineering 注入故障验证事务回滚与集群恢复能力使用chaosblade工具v1.5.0注入# 模拟网络延迟影响集群心跳 blade create network delay --interface eth0 --time 3000 --offset 1000 # 模拟磁盘 IO 高负载影响事务日志写入 blade create disk burn --read --write --iops 1000 # 模拟数据库连接中断触发 XA 回滚 blade create jdbc exception --database oracle --exception java.sql.SQLTimeoutException验证项主节点宕机后从节点在 30 秒内接管 HTTP 流量检查jboss.web:typeVirtualHost,*的requestCount是否转移XA 事务在 DB 断连后EAP 日志出现WFLYEJB0410: Transaction rolled back且无数据不一致网络恢复后jgroups协议栈自动完成MERGE_VIEW集群状态变为org.infinispan.CLUSTER: ISPN000094: Received new cluster view血泪经验我们曾在线上跳过第四步结果在一次机房电力波动中EAP 7.1.0 的hornetq集群因ping超时未及时剔除故障节点导致消息重复投递 17 次。从那以后我每次上线新集群都强制走一遍blade故障注入脚本——不是为了炫技是给系统上一道“后悔药”开关。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Spring Boot农批仓储管理系统:批次管理与保质期预警实战解析

Spring Boot农批仓储管理系统:批次管理与保质期预警实战解析

在农批市场里摸爬滚打过的人都知道,仓储这环节有多磨人。我早年给几位做农牧产品批发的朋友做过小工具,后来才意识到,通用进销存软件在农批场景下真不够用——土豆入库按麻袋算、出库按斤称,中间还要扣掉装卸破损;一车…

2026/10/19 2:34:02 阅读更多 →
Turbo 不玄学:拆解 2.1-Turbo 的加速路径,蒸馏步数压缩到底动了几刀

Turbo 不玄学:拆解 2.1-Turbo 的加速路径,蒸馏步数压缩到底动了几刀

Turbo 不玄学:拆解 2.1-Turbo 的加速路径,蒸馏步数压缩到底动了几刀 【免费下载链接】Qwen-Image-2.1-Turbo 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen-Image-2.1-Turbo "Turbo"是扩散模型世界里被用得最滥、也最容易被…

2026/10/19 13:52:17 阅读更多 →
InSAR三维形变解算实战:基于ISCE的升降轨数据处理

InSAR三维形变解算实战:基于ISCE的升降轨数据处理

这几年做地表形变监测,应该绕不开InSAR和ISCE。ISCE这个软件包,圈内习惯叫它科学计算环境,专门用来处理干涉合成孔径雷达数据,尤其是哨兵一号的TOPS模式,处理起来很顺手。不过大多数人熟练的是用ISCE出视线向形变图&am…

2026/10/19 11:54:28 阅读更多 →

最新新闻

GGUF 量化原理新手详解:Ling-3.0-tiny-GGUF 的 Q4_K_M 如何以 4.8GB 保全心智

GGUF 量化原理新手详解:Ling-3.0-tiny-GGUF 的 Q4_K_M 如何以 4.8GB 保全心智

【免费下载链接】Ling-3.0-tiny-GGUF 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/Ling-3.0-tiny-GGUF 点击查看 免费下载 这篇文章用小白也能看懂的方式,讲清 GGUF 量化原理:Ling-3.0-tiny-GGUF 是一个 7.9B 总参数、每 toke…

2026/10/20 2:04:15 阅读更多 →
Python股票数据分析实战:爬虫清洗与回测全流程

Python股票数据分析实战:爬虫清洗与回测全流程

简介:围绕股票大数据分析的Python实战资源,适合金融数据分析初学者及有Python基础、希望系统掌握爬虫采集与量化分析流程的读者。资源为7z压缩包,大小4.47MB,站内暂未列出文件明细;结合主题内容可预期包含Python爬虫脚…

2026/10/20 2:04:15 阅读更多 →
Spark 3.2.0预编译包Hadoop版本兼容性深度解析

Spark 3.2.0预编译包Hadoop版本兼容性深度解析

简介:本资源为 Apache Spark 3.2.0 官方二进制发行版(Hadoop 3.2 兼容构建),面向大数据开发工程师、数据工程师及高校学习分布式计算的中高级学习者,用于快速部署本地开发环境、搭建集群实验平台或开展流处理、SQL分析…

2026/10/20 2:04:15 阅读更多 →
kmodes实战:用Python搞定分类数据聚类

kmodes实战:用Python搞定分类数据聚类

简介:kmodes开源库的完整Python实现,提供k-Modes与k-Prototypes两种聚类算法,专用于处理纯分类变量及数值/分类混合数据。面向数据分析、机器学习开发者,解决传统k-means对非数值特征无法直接聚类的痛点。压缩包共30个文件&#x…

2026/10/20 2:04:15 阅读更多 →
SQLMap绕过WAF实战指南:从原理到参数调优

SQLMap绕过WAF实战指南:从原理到参数调优

那年我跟一期安全培训,第19天正好落在Web漏洞的SQL注入专题上。老师没有按课本讲怎么手工注入,而是花了大半节课专门演示SQLMap怎么绕过WAF。当时我还不理解为什么单独挑这个点讲,后来自己在授权测试里被WAF扇了无数次巴掌,才明白…

2026/10/20 2:04:15 阅读更多 →
数据搜索:跨文件搜索,清单数据一搜即得

数据搜索:跨文件搜索,清单数据一搜即得

干工程的,谁没被找数据卡过脖子。下午要交标,甲方临时要一份历史项目的报价明细;结算对数对不上,得翻当时的清单查原始数据——文件在哪个电脑、哪个文件夹,都得先想半天。端点星工程助手的数据搜索,CtrlF …

2026/10/20 2:03:15 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →