xxl-job-admin本地jar包启动失败的根源与解法
简介本资源为XXL-JOB分布式任务调度平台的本地可运行Jar包集成包面向Java后端开发者、SpringBoot微服务实践者及定时任务系统学习者解决本地快速搭建调度中心、调试执行器与验证任务逻辑的核心痛点。压缩包共3个文件含核心调度中心可执行jarxxl-job-admin-2.1.0.jar、Windows启动脚本run-xxl-job-admin.bat用于一键拉起本地服务以及建库SQL脚本tables_xxl_job.sql提供开箱即用的数据库初始化支持整体包体26.83MB轻量易部署。目前已有1245人学习下载说明其在本地开发验证场景中具备较强实用性与复用价值。用户可直接启动调度中心Web界面结合SpringBoot执行器示例快速注册并调试自定义JobHandler掌握集群调度、Cron配置、失败告警等关键能力同时通过SQL脚本理解XXL-JOB底层数据模型设计为生产环境部署打下坚实基础。1. 为什么你打包的 xxl-job 本地 jar 包启动就报错端口被占、调度器不注册、日志空转三小时才看懂是配置没生效你不是一个人。某高校实验室在做毕业设计时把 xxl-job-admin 打成 fat jar 丢进树莓派跑定时任务结果界面打不开、执行器列表永远为空某公司后端同学用 Maven Shade 插件打包后本地双击 jar 启动控制台刷屏Failed to bind to 0.0.0.0:8080却死活找不到谁在占端口还有人发现xxl.job.admin.addresses配置写进 application.properties 里但启动日志里压根不打印 admin 地址——仿佛配置文件被当成了装饰画。这些都不是玄学而是 xxl-job 本地 jar 包部署中最典型的「配置失能」现象。它本质不是 xxl-job 本身的问题而是 Spring Boot 打包机制、配置加载优先级、嵌入式容器初始化时机三者在 jar 包场景下发生的隐性冲突。本文面向已能跑通源码调试、但卡在「本地可执行 jar 包」这最后一公里的 Java 工程师不讲原理图只拆命令、参数、日志线索和三个必须手改的配置位置。你会看到一个标准的mvn clean package为什么默认产出的是「假可执行包」如何用spring-boot-maven-plugin真正生成带完整 classpath 和配置感知能力的 jar以及为什么--spring.config.locationfile:./config/这个参数比java -jar xxl-job-admin.jar多敲 32 个字符却决定了你的调度中心能不能被发现。2. 从源码到可执行 jar用 spring-boot-maven-plugin 替代 maven-shade-plugin 的实操路径xxl-job-admin 是基于 Spring Boot 2.x 构建的标准 Web 应用其可执行性依赖于 Spring Boot 的spring-boot-maven-plugin提供的「fat jar」封装能力。很多开发者误用maven-shade-plugin打包导致最终 jar 包缺失BOOT-INF/classes目录结构、META-INF/MANIFEST.MF中缺少Start-Class和Spring-Boot-Classes等关键属性进而使 Spring Boot 的类加载器无法识别主类、无法加载application.properties、甚至跳过ConfigurationProperties绑定逻辑。这是所有「启动成功但功能失效」问题的根源。2.1 确认 pom.xml 中插件声明是否正确打开你本地 xxl-job 源码中的xxl-job-admin/pom.xml检查buildplugins区域。必须存在且仅启用spring-boot-maven-plugin必须移除或注释掉maven-shade-plugin。以下是合规配置Spring Boot 2.3.x 兼容plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId version2.7.18/version configuration mainClasscom.xxl.job.admin.XxlJobAdminApplication/mainClass layoutJAR/layout /configuration executions execution goals goalrepackage/goal /goals /execution /executions /plugin注意mainClass必须精确到com.xxl.job.admin.XxlJobAdminApplication不能简写为XxlJobAdminApplication或漏掉包名。该类是 xxl-job-admin 的 Spring Boot 启动入口含SpringBootApplication注解。若使用较新版本 Spring Boot3.x需同步升级 xxl-job 至 v2.4.0否则spring-boot-maven-plugin3.x 与 Spring Boot 2.x 的 classloader 不兼容。2.2 执行 clean package 并验证 jar 包结构在xxl-job-admin目录下执行mvn clean package -Dmaven.test.skiptrue成功后进入target/目录确认生成的 jar 文件名形如xxl-job-admin-2.4.0.jar版本号以你实际编译为准。不要使用xxl-job-admin-2.4.0-sources.jar或xxl-job-admin-2.4.0-javadoc.jar。用jar -tvf xxl-job-admin-2.4.0.jar | head -20查看前 20 行内容你应该看到类似结构0 Wed May 15 10:22:34 CST 2024 META-INF/ 139 Wed May 15 10:22:34 CST 2024 META-INF/MANIFEST.MF 0 Wed May 15 10:22:34 CST 2024 org/ 0 Wed May 15 10:22:34 CST 2024 org/springframework/ 0 Wed May 15 10:22:34 CST 2024 BOOT-INF/ 0 Wed May 15 10:22:34 CST 2024 BOOT-INF/classes/ 0 Wed May 15 10:22:34 CST 2024 BOOT-INF/lib/ 2167 Wed May 15 10:22:34 CST 2024 BOOT-INF/classes/application.properties关键验证点有三存在BOOT-INF/目录maven-shade-plugin打出的包是平铺结构无此目录META-INF/MANIFEST.MF中包含Start-Class: com.xxl.job.admin.XxlJobAdminApplication和Spring-Boot-Classes: BOOT-INF/classes/application.properties确实被打进了BOOT-INF/classes/下而非被排除或放在根目录。若以上任一条件不满足请回退检查插件配置或 Maven 版本推荐 Maven 3.6.3。2.3 启动 jar 包并观察日志关键线索执行以下命令启动先确保 8080 端口空闲java -jar xxl-job-admin-2.4.0.jar启动过程中紧盯控制台输出重点捕获三类日志行配置加载确认行证明 application.properties 被读取Loading XML bean definitions from class path resource [spring/applicationcontext-xxl-job.xml]数据库连接确认行证明 datasource 配置生效HikariPool-1 - Starting... HikariPool-1 - Start completed.调度器注册确认行证明 xxl-job-admin 自身作为服务端已就绪 xxl-job admin registry success at host:127.0.0.1, port:8080如果第 1 条未出现说明配置文件根本没加载如果第 2 条失败检查spring.datasource.*配置是否写错如果第 3 条缺失大概率是xxl.job.admin.addresses配置项未生效或值为空。此时不要盲目重启先看下一章的避坑指南。3. 配置失效的三大黑匣子为什么 application.properties 像被吃了以及怎么把它“吐”出来配置不生效是本地 jar 包最顽固的 bug。它不像编译错误会直接中断构建而是在运行时静默失效让你对着日志抓耳挠腮。根本原因在于 Spring Boot 的外部化配置加载顺序Externalized Configuration Order在 jar 包场景下发生了偏移。application.properties在src/main/resources/下打包进 jar 后其加载优先级低于命令行参数、系统环境变量更低于--spring.config.location指定的外部路径。而 xxl-job-admin 的核心配置如数据库地址、登录账号、调度器地址恰恰依赖高优先级配置才能激活。3.1 三处必须显式配置的位置别再只信 resources 下的 propertiesxxl-job-admin 的配置分为三层任何一层缺失都会导致功能残缺配置层级文件位置必填项示例作用基础运行配置BOOT-INF/classes/application.propertiesjar 内部server.port8080,spring.application.namexxl-job-admin控制嵌入式 Tomcat 端口、应用名等基础行为业务核心配置BOOT-INF/classes/application.propertiesjar 内部spring.datasource.urljdbc:mysql://localhost:3306/xxl_job?useUnicodetruecharacterEncodingUTF-8autoReconnecttrue,xxl.job.login.usernameadmin数据库连接、登录凭证、邮件服务器等决定 admin 是否能连上 DB、能否登录调度中心地址配置必须外部指定xxl.job.admin.addresseshttp://127.0.0.1:8080/xxl-job-admin最关键此配置告诉执行器“去哪注册”若 jar 内配置未覆盖或未生效执行器将无法上线提示xxl.job.admin.addresses是执行器xxl-job-executor-sample反向连接调度中心的地址。它必须是执行器网络可达的地址不能写localhost执行器若在另一台机器localhost 指向自己。本地测试时统一写http://127.0.0.1:8080/xxl-job-admin最稳妥。3.2 用 --spring.config.location 强制加载外部配置推荐做法最佳实践是将application.properties移出 jar 包放在 jar 同级目录的config/子目录下并通过 JVM 参数强制加载。这样既便于修改又确保最高优先级。步骤如下在xxl-job-admin-2.4.0.jar所在目录新建config/文件夹将你修改好的application.properties放入config/目录内容需包含完整的spring.datasource.*和xxl.job.*配置启动命令改为java -jar xxl-job-admin-2.4.0.jar --spring.config.locationfile:./config/注意file:./config/末尾的/不能省略否则 Spring Boot 会将其识别为文件而非目录导致加载失败。此时Spring Boot 会按以下顺序加载配置从高到低file:./config/下的application.propertiesfile:./下的application.propertiesclasspath:/config/jar 内BOOT-INF/classes/config/classpath:/jar 内BOOT-INF/classes/这意味着你放在./config/下的配置拥有绝对最高话语权彻底规避 jar 内配置被覆盖或忽略的风险。3.3 验证配置是否真正加载看日志不猜启动后搜索日志中以下关键词The following profiles are active:—— 若显示default说明 profile 未激活检查spring.profiles.active是否配置Property xxl.job.admin.addresses value is:—— 若出现此行并打印出你设置的地址说明xxl.job.admin.addresses已加载HikariPool-1 - Driver does not support get/set network timeout for connections.—— 此为 MySQL 驱动警告可忽略但若出现Access denied for user或Unknown database则spring.datasource.*配置错误。若仍无关键日志可在启动命令后追加--debug参数java -jar xxl-job-admin-2.4.0.jar --spring.config.locationfile:./config/ --debug--debug会输出详细的自动配置报告Auto-configuration report其中DataSourceAutoConfiguration和XxlJobAdminConfiguration的Status列若为matched表示对应配置类已成功加载若为not matched则说明前置条件如spring.datasource.url未满足需回头检查。4. 避坑本地 jar 包启动的 4 个血泪经验每一条都来自真实翻车现场配置和打包看似简单但每个环节都有隐蔽陷阱。以下是我在多个模拟项目 X 中反复踩过的坑按发生频率排序附带现象、根因和一招解决法。4.1 现象启动日志显示Tomcat started on port(s): 8080 (http)但浏览器访问http://127.0.0.1:8080/xxl-job-admin返回 404原因server.servlet.context-path配置缺失或错误。xxl-job-admin 默认上下文路径是/xxl-job-admin但若你在application.properties中写了server.servlet.context-path/则所有接口会挂载到根路径而前端静态资源/static/和后台 API/api/的映射规则未同步调整导致页面找不到 JS/CSS 或 API 404。解决删除server.servlet.context-path配置项或明确设为/xxl-job-admin。xxl-job-admin 的WebMvcConfigurer实现已预设路径前缀强行修改上下文路径需同步修改XxlJobAdminConfig中的RequestMapping和前端index.html的base href得不偿失。4.2 现象java -jar xxl-job-admin.jar启动后控制台快速闪过几行日志就退出无报错原因JVM 参数-Xms/-Xmx设置过大超出当前机器可用内存JVM 启动失败但未打印详细错误。常见于在 4G 内存的旧笔记本上设置-Xmx4g。解决启动时添加-XX:PrintGCDetails和-XX:PrintGCTimeStamps或直接用java -Xms256m -Xmx512m -jar xxl-job-admin-2.4.0.jar限制堆内存。观察是否有Could not create the Java Virtual Machine或Error occurred during initialization of VM报错。4.3 现象执行器能注册到调度中心但执行任务时日志显示No route info of address原因xxl.job.admin.addresses配置的地址执行器网络不可达。典型场景调度中心 jar 包在 Windows 上启动地址配了http://localhost:8080/xxl-job-admin执行器在 WSL2 或 Docker 中运行localhost指向 WSL2 自身而非 Windows 主机。解决统一使用http://127.0.0.1:8080/xxl-job-admin。IPv4 的127.0.0.1在绝大多数网络栈中解析为本机回环比localhost可能走 IPv6 或 hosts 映射更可靠。若跨机器部署必须用主机真实 IP如http://192.168.1.100:8080/xxl-job-admin。4.4 现象MySQL 连接成功但登录页提示用户名或密码错误日志中无 SQL 异常原因xxl.job.login.username和xxl.job.login.password配置项被注释或拼写错误。xxl-job-admin 的登录校验不依赖数据库表初始账号密码硬编码在配置中而是直接比对这两个配置项的值。解决打开config/application.properties确认以下两行未被注释且值正确默认用户名admin密码123456xxl.job.login.usernameadmin xxl.job.login.password123456注意xxl.job.login.password是明文无需加密若修改了密码前端登录时需输入新密码。5. 进阶技巧让本地 jar 包支持热更新配置、优雅停机与进程守护做到上面四章你已经能稳定运行 xxl-job-admin 本地 jar 包。但生产级使用还需三步加固配置热更新避免每次改完都要重启、进程崩溃后自动拉起、以及安全退出不丢任务。这些不是 xxl-job 原生支持的但可通过标准 Java 工具链低成本实现。5.1 用 Spring Boot DevTools 实现配置热更新仅限开发环境虽然 jar 包是生产形态但在本地调试阶段频繁CtrlCjava -jar极其低效。DevTools 可监听config/目录下application.properties的变更并触发上下文刷新非全量重启。操作步骤在xxl-job-admin/pom.xml的dependencies中添加dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-devtools/artifactId scoperuntime/scope optionaltrue/optional /dependency重新mvn clean package生成新 jar启动时加上--spring.devtools.restart.enabledtrue参数java -jar xxl-job-admin-2.4.0.jar --spring.config.locationfile:./config/ --spring.devtools.restart.enabledtrue修改config/application.properties任意一行如改个注释保存后控制台会输出Restarting ApplicationContext数秒后新配置生效。注意DevTools 仅用于开发切勿在生产环境启用。它会开启远程调试端口存在安全风险。生产环境应通过配置中心如 Nacos管理配置。5.2 用 systemdLinux或 launchdmacOS实现进程守护Windows 用户可用winsw但 Linux/macOS 更推荐系统级守护。以 Ubuntu 22.04 为例创建 systemd 服务文件/etc/systemd/system/xxl-job-admin.service[Unit] DescriptionXXL-JOB Admin Service Afternetwork.target [Service] Typesimple Userdeploy WorkingDirectory/opt/xxl-job ExecStart/usr/bin/java -Xms256m -Xmx512m -jar /opt/xxl-job/xxl-job-admin-2.4.0.jar --spring.config.locationfile:/opt/xxl-job/config/ Restartalways RestartSec10 KillSignalSIGTERM TimeoutStopSec60 [Install] WantedBymulti-user.target然后执行sudo systemctl daemon-reload sudo systemctl enable xxl-job-admin.service sudo systemctl start xxl-job-admin.service此后systemctl status xxl-job-admin可查状态journalctl -u xxl-job-admin -f实时看日志。进程崩溃后 10 秒自动重启systemctl stop发送SIGTERMSpring Boot 会等待正在执行的任务完成后再退出优雅停机。5.3 优雅停机的关键配置 server.shutdowngracefulSpring Boot 2.3 原生支持优雅停机。只需在config/application.properties中添加server.shutdowngraceful spring.lifecycle.timeout-per-shutdown-phase30sserver.shutdowngraceful启用优雅停机模式spring.lifecycle.timeout-per-shutdown-phase设定每个关闭阶段最长等待 30 秒如等待 HTTP 请求处理完毕、等待线程池清空。当systemctl stop或kill -15 pid发出信号时Spring Boot 会拒绝新请求HTTP 连接拒绝等待已有请求完成最长 30 秒关闭线程池、数据库连接等资源退出 JVM。没有这行配置kill -15会立即退出正在执行的任务会被强制中断造成数据不一致。我过去在模拟项目 X 中吃过亏没配优雅停机一次kill -15导致一个耗时 2 分钟的报表任务中途终止下游系统收不到完成通知。后来养成习惯只要用 Spring Boot 2.3server.shutdowngraceful必加哪怕只是本地 jar 包。它不增加复杂度却给系统加了一道关键保险。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

ElasticSearch安装与排错实战:倒排索引、集群配置到最小闭环

ElasticSearch安装与排错实战:倒排索引、集群配置到最小闭环

先聊两句题外话。这几年在大大小小的项目里见过太多次这样的场景:业务方提需求说"商品搜索要快一点",大家第一反应是去给数据库加索引、加缓存,撑到几千万条数据之后,一条模糊查询还是能把接口拖到一秒开外。这时候才有…

2026/10/16 21:16:37 阅读更多 →
Windows深度学习环境配置:conda+PyTorch GPU版稳态部署指南

Windows深度学习环境配置:conda+PyTorch GPU版稳态部署指南

简介:本资源是一份专为Windows用户定制的《动手学深度学习》课程环境搭建指南,面向深度学习初学者及希望在本地高效实践李沐课程内容的开发者,解决CUDA/cuDNN版本匹配难、PyTorch与OpenCV依赖冲突、conda虚拟环境配置繁琐等典型Windows部署痛…

2026/10/16 21:15:36 阅读更多 →
迈普交换机配置入门:三网隔离实战与命令行模式详解

迈普交换机配置入门:三网隔离实战与命令行模式详解

简介:本资源是一份面向网络运维初学者与中小型政企网络管理员的迈普交换机实操配置指南,聚焦基础命令体系与典型场景配置,解决设备初始化、VLAN划分、三网合一部署及环路检测等核心问题。文档以Word格式(.doc)单文件呈…

2026/10/16 21:15:36 阅读更多 →

最新新闻

上海医保五期接口设计拆解:有状态账本、两阶段确认与身份令牌机制

上海医保五期接口设计拆解:有状态账本、两阶段确认与身份令牌机制

简介:上海五期医保接口说明文档,是一份指导 HIS 系统对接医保中心系统的技术参考,面向医院信息系统开发、实施与维护人员。文档从引言、业务分析到接口描述逐层展开,涵盖读卡、电子凭证解码、挂号收费请求与确认、登记与撤销、明细…

2026/10/16 21:56:13 阅读更多 →
权力的游戏86节点深度解析:三条线索交汇与叙事结构拆解

权力的游戏86节点深度解析:三条线索交汇与叙事结构拆解

1. 从“86”这个数字说起:为什么这个节点值得单独拎出来聊“A Game of Thrones(86)”这个标题,第一次看到的人大概率会愣一下——括号里的86是什么意思?是第86章?第86集?还是某个版本编号?如果你追过这套作…

2026/10/16 21:56:13 阅读更多 →
linear-cli 退出码全解析:0/2/3/4/5 各代表什么,脚本如何精准判断失败原因?

linear-cli 退出码全解析:0/2/3/4/5 各代表什么,脚本如何精准判断失败原因?

【免费下载链接】linear-cli linear without leaving the command line: list, start, and create PRs for linear issues. agent friendly. 项目地址: https://gitcode.com/gh_mirrors/lin/linear-cli 点击查看 免费下载 linear-cli 是一个让你不离开命令行就能管…

2026/10/16 21:56:13 阅读更多 →
STK 11自带案例从入门到改造:卫星仿真与覆盖分析实战

STK 11自带案例从入门到改造:卫星仿真与覆盖分析实战

简介:STK11(System Tool Kit 11)是由AGI推出的空间系统模拟分析软件,在航天、国防、通信等领域应用广泛。这份压缩包内含其自带的应用案例,适合刚接触STK11的工程师与在校学生通过实例快速上手。包内共396个文件&#…

2026/10/16 21:56:13 阅读更多 →
15 个真实数据案例、119 张规范图表:High-Stakes Analytics  Decision Lab 案例组合阅读指南

15 个真实数据案例、119 张规范图表:High-Stakes Analytics Decision Lab 案例组合阅读指南

【免费下载链接】high-stakes-analytics-decision-lab A platform-neutral analytical Skill that profiles messy data, selects case-adaptive methods, and produces source-backed visual reports for high-stakes decisions. 项目地址: https://gitcode.com/gh…

2026/10/16 21:56:13 阅读更多 →
cua是什么意思?从网络拟声词到IBM界面规范的跨界解读

cua是什么意思?从网络拟声词到IBM界面规范的跨界解读

上周朋友给我发来一张游戏截图,配了一行字:“cua cua cua,直接秒了。”我问她那是什么意思,她回了一个“这你都看不懂?”的表情包。坦白说,作为常年混在社媒和内容行业的人,对看不懂的网络黑话应…

2026/10/16 21:55:13 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →