Eclipse相对路径问题解析:工作目录与资源加载兼容方案

1. 为什么相对路径在Eclipse里总跟你捉对厮杀

刚入行那会儿,我写了一个读取配置文件的Java小工具,在命令行里用java -jar跑得好好的,一挪到Eclipse里点Run As,立刻甩给我一个FileNotFoundException。当时我盯着控制台那行红字,心里只有一个念头:同一个文件,同一个路径,怎么换个地方就翻脸不认人了?

这个问题的根源,在于Eclipse启动Java程序时的工作目录(Working Directory)和你想象的不一样。命令行里你cd到哪个目录,工作目录就是哪个;但在Eclipse里,默认的工作目录是项目根目录,而不是src目录,也不是你放资源文件的那个子目录。很多人写相对路径时脑子里想的是"相对于我的Java文件",但JVM认的是"相对于进程启动时的工作目录",这两者经常对不上。

更麻烦的是,Eclipse的项目结构本身就有src、bin(或target/classes)、项目根目录这几层,资源文件放哪儿、编译后跑到哪儿,每一步都可能让相对路径失效。所以这篇内容我打算把这件事彻底讲透:从工作目录的确认方法,到资源加载的正确姿势,再到打包成JAR后路径行为的变化,最后给出一套我自己一直在用的、能同时兼容Eclipse内运行和打包后运行的路径处理方案。

适合谁看?如果你写过new File("config.properties")然后在Eclipse里报错,或者你的程序在IDE里正常、打包后就找不到文件,那这篇就是写给你的。不需要你有多深的Java功底,但至少要能看懂基本的文件IO代码。

2. 先搞清楚Eclipse到底把哪个目录当成了"家"

在动手改代码之前,必须先确认一件事:你的程序在Eclipse里运行时,工作目录到底是哪个。这个问题不搞清楚,后面所有关于相对路径的讨论都是空中楼阁。

2.1 三种确认工作目录的实操方法

最直接的办法是在代码里打印一行:

public class WorkDirDemo { public static void main(String[] args) { System.out.println("工作目录: " + System.getProperty("user.dir")); } }

在Eclipse里Run As → Java Application,控制台输出的就是当前工作目录。我实测过很多次,默认情况下输出的是项目根目录的绝对路径,比如D:\workspace\MyProject。注意,是项目根目录,不是src,也不是bin。

第二种方法是通过Run Configuration查看。右键你的Java文件 → Run As → Run Configurations → 在Arguments选项卡里找到Working directory这一栏。这里默认勾选的是"Default",而Default指向的就是项目根目录。你可以手动改成"Other"并指定任意目录,但改完之后你的相对路径基准就变了,团队里其他人如果没同步这个配置,行为就会不一致。

第三种方法更直观:在项目根目录下放一个测试文件,比如test.txt,然后写new File("test.txt").exists(),返回true就说明工作目录确实是项目根目录。如果返回false,那说明你的Run Configuration被人改过,或者项目用了Maven/Gradle的某些插件改变了工作目录。

提示:Maven项目在Eclipse里通过mvn exec:java运行时,工作目录默认也是项目根目录,但如果你在pom.xml里配置了workingDirectory参数,行为可能不同。这一点在排查时要特别留意。

2.2 为什么Eclipse要这样设计

很多人觉得Eclipse这个默认值很坑,但其实它有自己的逻辑。项目根目录是项目所有内容的"最大公约数"——src下面是源码,resources下面是资源,lib下面是依赖,从根目录出发,你可以用统一的相对路径访问到项目内的任何东西。如果默认工作目录设成src,那访问项目根目录下的pom.xml就得写../pom.xml,反而更别扭。

问题在于,大多数初学者写相对路径时,参照系是自己的Java文件所在位置,而不是项目根目录。比如Java文件在src/com/example/下,资源文件也在同一层,很多人就写new File("config.properties"),心里想的是"就在我旁边啊"。但JVM从项目根目录出发去找,自然找不到。

这里有个生活化的类比:你站在一栋大楼的门口(项目根目录),有人告诉你"去三楼找302房间"(相对路径),你能找到。但如果有人告诉你"去我办公室旁边的会议室"(相对于某个具体房间的路径),而你根本不知道"我办公室"在哪一层,那就抓瞎了。Eclipse默认给你的参照系是大楼门口,而你的代码里写的参照系可能是某个具体房间。

2.3 一个容易忽略的细节:不同运行方式的工作目录差异

同一个项目,在Eclipse里用不同方式启动,工作目录可能不一样。我整理了一个对照表:

启动方式默认工作目录备注
Run As → Java Application项目根目录最常见
Run As → JUnit Test项目根目录与Java Application一致
Debug As → Java Application项目根目录与Run一致
Maven build(exec:java)项目根目录除非pom中另行配置
外部终端 java -jar执行命令时所在目录与Eclipse无关

这张表的关键结论是:在Eclipse内部,工作目录基本稳定为项目根目录。所以只要你的相对路径以项目根目录为基准来写,在IDE内运行就不会出问题。但打包成JAR拿到外面跑,工作目录就变成了你敲java -jar命令时所在的目录,这时候原来的相对路径很可能失效。这就是为什么"IDE里好好的,打包就崩"。

3. 资源文件到底该放在哪一层

工作目录搞清楚了,下一个问题就是:我的配置文件、图片、模板这些资源,到底应该放在项目的哪个位置?放错位置,路径怎么写都是错。

3.1 src目录下的资源会被编译进classpath

如果你把config.properties直接放在src目录下(或者src/main/resources下,Maven项目),Eclipse在编译时会把非Java文件复制到bin目录(Maven项目是target/classes)。这意味着这些文件在运行时是classpath资源,而不是普通文件系统里的文件。

这两者的区别很关键。classpath资源要用getClass().getResourceAsStream()或getClassLoader().getResourceAsStream()来读取,不能用new File()。因为打包成JAR后,classpath资源被压缩在JAR包里,文件系统路径根本访问不到。

我见过太多人把配置文件放在src下,然后用new File("src/config.properties")去读,在Eclipse里能跑通(因为工作目录是项目根目录,src/config.properties确实存在),但打包后JAR里没有src这个目录结构,直接报错。这种"假成功"最害人,因为它让你误以为路径写对了。

3.2 项目根目录下的文件是真正的文件系统路径

如果你把资源放在项目根目录下,比如D:\workspace\MyProject\config.properties,那它就是一个普通的文件系统文件。用new File("config.properties")可以访问,因为工作目录就是项目根目录。但打包成JAR后,这个文件不会自动被打进去,除非你在构建脚本里显式配置。而且即使打进去了,JAR内的文件也不能用new File()访问。

所以我的建议很明确:需要随程序分发的资源,一律放在src/main/resources下,用classpath方式读取;只有那些明确不打包、由外部提供的配置文件,才放在项目根目录或外部目录,用文件系统方式读取。

3.3 一个真实项目的目录结构示例

假设你在做一个数据导出工具,需要读取一个模板文件template.xlsx和一个配置文件app.properties。我推荐的目录结构是这样的:

MyProject/ ├── src/ │ └── main/ │ ├── java/ │ │ └── com/example/ │ │ └── Exporter.java │ └── resources/ │ ├── template.xlsx │ └── app.properties ├── pom.xml └── output/ (运行时生成的目录,不纳入版本控制)

template.xlsx和app.properties都放在resources下,编译后它们会出现在target/classes(或Eclipse的bin)目录下,运行时通过classpath读取。output目录是程序运行时创建的,用相对路径output/访问,因为工作目录是项目根目录,所以会创建在项目根目录下。打包后如果工作目录变了,output也会跟着变,这通常是符合预期的——输出文件本来就该跟着运行位置走。

4. 读取资源的三种姿势与各自的适用场景

知道了资源放哪儿,接下来就是怎么读。Java里读取资源有好几种写法,每种的行为边界都不一样,用错了就会踩坑。

4.1 用getResourceAsStream读取classpath资源

这是读取打包资源的标准做法:

InputStream is = Exporter.class.getResourceAsStream("/template.xlsx");

注意路径前面的斜杠。getResourceAsStream方法在Class对象上调用时,如果路径以/开头,表示从classpath根目录开始找;如果不以/开头,表示从当前类所在的包目录开始找。这个规则很容易搞混,我的习惯是一律加斜杠,从根目录找,这样路径含义最明确。

对应的getClassLoader().getResourceAsStream()方法则不能以斜杠开头,因为ClassLoader本来就从根目录找。这两种写法混用是常见错误:

// 正确:Class方式,加斜杠 Exporter.class.getResourceAsStream("/template.xlsx"); // 正确:ClassLoader方式,不加斜杠 Exporter.class.getClassLoader().getResourceAsStream("template.xlsx"); // 错误:ClassLoader方式加斜杠,返回null Exporter.class.getClassLoader().getResourceAsStream("/template.xlsx");

我实测过,最后那种写法不会抛异常,而是静默返回null,然后你在后面用的时候才报NullPointerException,排查起来很费劲。所以记住这个口诀:Class加斜杠,Loader不加斜杠。

4.2 用Files或FileInputStream读取文件系统资源

如果资源确实在文件系统上(比如用户自己指定的配置文件),那就用标准文件IO:

Path configPath = Paths.get("config", "app.properties"); try (InputStream is = Files.newInputStream(configPath)) { Properties props = new Properties(); props.load(is); }

这里的config/app.properties是相对于工作目录的路径。在Eclipse里工作目录是项目根目录,所以它会去找项目根目录/config/app.properties。如果你希望这个路径更可控,可以在程序启动时通过启动参数传入绝对路径,或者用System.getProperty("user.dir")拼出绝对路径再操作。

4.3 两种方式的对比与选择依据

对比维度classpath方式文件系统方式
资源位置src/main/resources项目根目录或外部目录
打包后是否可用可用,资源在JAR内需额外配置,且不能用File直接读JAR内文件
路径基准classpath根工作目录
适合场景程序内置的模板、默认配置用户自定义配置、运行时生成的文件
修改是否需要重新打包需要不需要

选择逻辑很简单:跟着程序走的用classpath,跟着用户或环境走的用文件系统。模板文件、默认配置、图标这些跟着程序走;数据库连接串、日志输出目录这些跟着环境走。

注意:如果你的程序既要能在Eclipse里跑,又要能打包成JAR跑,那所有内置资源都必须用classpath方式读取。用new File("src/...")这种写法在Eclipse里能跑通,但打包后必挂,这是最典型的"IDE陷阱"。

5. 打包成JAR后路径行为的变化与应对

Eclipse里跑通只是第一步,真正考验路径处理的是打包之后。我见过太多项目在IDE里一切正常,一打成JAR就各种找不到文件。这一节把打包后的变化讲清楚。

5.1 JAR内文件不能用File访问

这是最核心的一条规则。JAR本质上是一个ZIP压缩包,里面的文件没有独立的文件系统路径。new File("template.xlsx")在JAR运行时,会在工作目录下找这个文件,而不是在JAR包内找。所以如果你的资源在JAR里,必须用getResourceAsStream。

我做过一个实验:把template.xlsx放在src/main/resources下,打包成JAR,然后在JAR所在目录运行java -jar app.jar。用new File("template.xlsx")返回false,用getResourceAsStream("/template.xlsx")能正常读到内容。结论很明确:JAR内资源只能用流的方式读。

5.2 工作目录变成命令执行位置

在Eclipse里工作目录是项目根目录,打包后你在哪个目录敲java -jar,工作目录就是哪个。比如你把JAR放在D:\dist\下,在D:\dist\目录执行命令,工作目录就是D:\dist\。这时候如果代码里有new File("output/result.txt"),文件会生成在D:\dist\output\下,而不是项目根目录。

这个行为本身是合理的——输出文件跟着运行位置走,符合直觉。但如果你在代码里硬编码了new File("src/output/result.txt")这种路径,打包后就会在D:\dist\src\output\下找,大概率不存在。所以任何包含src的硬编码路径都是危险信号,看到就应该改掉。

5.3 用启动参数显式指定路径基准

如果你希望程序的工作目录不受启动位置影响,可以在启动脚本里显式切换目录:

cd /path/to/app java -jar app.jar

或者在Java代码里用绝对路径:

String baseDir = System.getProperty("app.home", System.getProperty("user.dir")); Path outputDir = Paths.get(baseDir, "output");

然后在启动时通过-Dapp.home=/your/path传入基准目录。这样无论从哪里启动,输出路径都是可控的。这个技巧在部署服务时特别有用,我自己的项目基本都会留一个这样的配置项。

6. 一套兼容Eclipse与JAR的路径处理方案

讲了这么多原理和坑,最后给出一套我自己一直在用的方案。核心思路是:内置资源走classpath,外部文件走可配置的基准目录,绝不硬编码src。

6.1 资源加载工具类的实现

public final class ResourceLoader { private ResourceLoader() {} /** * 读取classpath资源,兼容Eclipse与JAR运行 */ public static InputStream loadClasspath(String path) { String normalized = path.startsWith("/") ? path : "/" + path; InputStream is = ResourceLoader.class.getResourceAsStream(normalized); if (is == null) { throw new IllegalArgumentException("classpath资源不存在: " + normalized); } return is; } /** * 获取外部文件路径,基准目录可通过系统属性覆盖 */ public static Path resolveExternal(String relativePath) { String base = System.getProperty("app.home", System.getProperty("user.dir")); return Paths.get(base, relativePath); } }

这个工具类有两个方法:loadClasspath用于读取打包在JAR内的资源,resolveExternal用于处理外部文件。resolveExternal的基准目录默认是工作目录,但可以通过-Dapp.home=xxx覆盖,部署时很灵活。

6.2 在Eclipse中验证的完整步骤

  1. 在src/main/resources下放一个app.properties,内容随便写几行。
  2. 写一个测试类,调用ResourceLoader.loadClasspath("app.properties"),确认能读到。
  3. 在项目根目录下创建一个data目录,调用ResourceLoader.resolveExternal("data/test.txt"),确认路径指向项目根目录/data/test.txt。
  4. 在Eclipse里Run As → Java Application,观察输出。

6.3 打包后验证的完整步骤

  1. 用Maven执行mvn clean package,确认target下生成了JAR。
  2. 把JAR复制到一个干净目录,比如D:\test-run\。
  3. 在D:\test-run\下执行java -jar app.jar,确认classpath资源能读到,外部文件生成在D:\test-run\data\下。
  4. 再执行java -Dapp.home=D:\custom -jar app.jar,确认外部文件生成在D:\custom\data\下。

这两步验证做完,基本可以保证路径处理在IDE和打包后行为一致。我每次新建项目都会跑一遍这个流程,花不了几分钟,但能省掉后面大量的排查时间。

6.4 几个我踩过的坑和对应经验

第一个坑:用getResource返回null时不报错。getResourceAsStream找不到资源返回null,后面用的时候才炸。所以我在工具类里加了判空并抛异常,让问题在源头暴露。

第二个坑:路径中的空格和中文。Windows下项目路径带空格时,new File("my folder/config.txt")一般没问题,但如果用URL方式获取路径再转File,空格会被编码成%20,导致找不到文件。解决办法是统一用Paths.get()处理,不要手动拼URL。

第三个坑:Eclipse的clean操作。有时候改了资源文件,Eclipse没有自动复制到bin目录,导致读到的还是旧内容。执行Project → Clean可以强制重新编译复制。这个坑很隐蔽,因为代码没变,但资源内容不对,容易怀疑人生。

第四个坑:Maven的resource filtering。如果你在pom.xml里开启了resource filtering,app.properties里的${...}占位符会被替换,有时候会意外破坏文件内容。如果不需要这个功能,建议关闭,或者把不需要过滤的资源排除掉。

7. 关于相对路径,我现在的工作习惯

写了这么多年Java,关于路径处理我总结了几条自己的规矩,基本没再在这上面翻过车。

第一条,代码里永远不出现src。只要看到new File("src/..."),不管当前能不能跑通,一律改掉。因为src是开发期的目录结构,运行期不存在。

第二条,内置资源一律classpath。模板、默认配置、图标、字体,全部放resources下,用getResourceAsStream读。这样IDE和JAR行为一致,不用操心工作目录。

第三条,外部文件路径可配置。输出目录、用户配置、日志位置,全部通过系统属性或配置文件指定基准目录,默认值用user.dir。这样部署时改一个参数就能调整,不用改代码。

第四条,新项目先跑一遍路径验证。就是上面6.2和6.3那套流程,花几分钟跑一遍,确认classpath资源和外部文件在两种环境下都正常。这个习惯帮我省了无数次"打包后才发现问题"的返工。

最后分享一个小技巧:如果你在Eclipse里调试时不确定某个相对路径最终指向哪里,可以在表达式视图里对Paths.get("your/path").toAbsolutePath()求值,它会直接告诉你绝对路径是什么。这比在代码里加打印语句再重新运行要快得多,尤其是在断点调试的时候。

相关新闻

开源代码审查工具 open-code-review 的原理与实战

开源代码审查工具 open-code-review 的原理与实战

写代码这么多年,我一直觉得 code review 是最能体现团队技术氛围的一件事。代码写得好不好,review 别人代码时一针见血,说明你对自己写的东西有没有深入思考过。但现实很骨感,项目赶进度的时候,Review 往往是最先被牺牲…

2026/10/19 19:42:00 阅读更多 →
智慧识花系统从零搭建:深度学习图像分类与迁移学习实战

智慧识花系统从零搭建:深度学习图像分类与迁移学习实战

从零搭一个能用的智慧识花系统:设计思路、训练细节和那些坑我今年花了不少时间做了一个基于深度学习的智慧识花系统,从数据集准备、模型训练、后端接口到前端展示全流程走了一遍。这篇东西不是来秀架构图的,而是把我踩过的坑、想明白的道理、…

2026/10/19 19:42:00 阅读更多 →
FT230XS 串口转 USB 驱动实战:从枚举失败到稳定通信

FT230XS 串口转 USB 驱动实战:从枚举失败到稳定通信

简介:FT230XS UART to USB Driver 是面向嵌入式开发与硬件调试人员的串口转USB驱动资源,针对采用FT230XS芯片的设备在Windows与Linux环境下无法正常识别或通信的问题,提供完整的驱动安装与开发支持。压缩包共30个文件,约1.59MB&am…

2026/10/19 19:42:00 阅读更多 →

最新新闻

UDP+TCP+多线程+Swing:局域网P2P即时通信课设全解析

UDP+TCP+多线程+Swing:局域网P2P即时通信课设全解析

简介:广东工业大学计算机网络课程设计项目,实现基于P2P的局域网即时通信系统,面向计网课设、Java网络编程与P2P应用开发者。系统采用P2P架构,程序既是服务器又是客户端,通过3333端口扫描局域网在线对等方,完…

2026/10/19 20:29:26 阅读更多 →
约束路径规划+改进ICP:复杂曲面点云配准误差降88.2%

约束路径规划+改进ICP:复杂曲面点云配准误差降88.2%

1. 从一组实测数据说起:为什么基础ICP在复杂曲面上总是“差一口气”先把标题里那组数字摆出来:平均误差0.599mm,RMSE 0.826mm,相比基础ICP下降88.2%。做过三维重建的人看到这组数字,第一反应大概率是“降得有点狠”&am…

2026/10/19 20:29:26 阅读更多 →
基于SpringBoot+小程序的掌上智慧医疗预约挂号系统设计

基于SpringBoot+小程序的掌上智慧医疗预约挂号系统设计

1. 项目背景与选题价值每年毕设季都有大量同学私信问同一个问题:想做小程序类的管理系统,又怕撞题、怕做不出来、怕答辩被刁难。我给出的建议向来很直接——B端后台 C端小程序是毕业设计里性价比最高的组合,而这个"基于springboot小程序…

2026/10/19 20:28:21 阅读更多 →
五种经典边缘检测算子详解:从Roberts到Canny的MATLAB实现与对比

五种经典边缘检测算子详解:从Roberts到Canny的MATLAB实现与对比

1. 边缘检测与图像分割的整体思路做图像处理的人应该都有过这样的经历:拿到一张图,最先想知道的往往不是整幅图的颜色分布,而是“这张图里什么东西在哪个位置”。边缘检测就是回答这个问题的基础手段。所谓边缘,说白了就是图像中灰…

2026/10/19 20:28:21 阅读更多 →
中级开发者AI能力升级路线图:从会用AI到会评AI

中级开发者AI能力升级路线图:从会用AI到会评AI

给中级开发者的 AI 能力升级路线图这两年 AI 编程工具发展太快,几乎每隔几个月就有新东西出来。不少中级开发者心里其实挺焦虑的:一边是网上铺天盖地的“AI 取代程序员”论调,一边是各种新工具、新模型层出不穷,感觉不学就要掉队。…

2026/10/19 20:28:21 阅读更多 →
SSM+Vue仓库管理系统开发实战:毕业设计源码与部署指南

SSM+Vue仓库管理系统开发实战:毕业设计源码与部署指南

简介:这是基于SSMVueHTML的Java仓库管理信息系统毕业设计资源,面向正在准备毕业设计、需要参考完整前后端分离项目或学习SSM框架整合的在校生。系统后台采用SSM框架,管理页面由Vue实现,前端展示页面为HTML,数据库使用M…

2026/10/19 20:28:21 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于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 阅读更多 →