You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CLI环境下clojure.java.io/resource返回nil的原因排查

问题:Clojure CLI环境下clojure.java.io/resource返回nil,但slurp能正常读取文件

操作复现

CLI环境下操作:

(ns something
  (:require [clojure.java.io :as io]))

(io/resource "file.txt") 

=> nil

(slurp "file.txt")

=> "content of file"

原因解析

clojure.java.io/resource的核心逻辑是从JVM的类路径(classpath)中查找资源文件,而非读取当前命令行的工作目录文件。

slurp "file.txt"是直接从你启动Clojure CLI时所在的当前工作目录读取文件,所以能找到内容;但如果你的file.txt不在类路径包含的目录或Jar包中,io/resource就会返回nil。

解决办法

  1. 将文件放入类路径目录:
    Clojure CLI默认会把项目的src、resources目录加入类路径,你可以把file.txt移到resources文件夹下,之后就能正常通过io/resource读取:

    (slurp (io/resource "file.txt"))
    
  2. 手动添加当前目录到类路径:
    启动Clojure CLI时,用-cp参数把当前目录(.)加入类路径:

    clj -cp .
    

    这样io/resource就能识别当前目录下的file.txt。

内容的提问来源于stack exchange,提问作者Laura Bieber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:18:11