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。
解决办法
将文件放入类路径目录:
Clojure CLI默认会把项目的src、resources目录加入类路径,你可以把file.txt移到resources文件夹下,之后就能正常通过io/resource读取:(slurp (io/resource "file.txt"))手动添加当前目录到类路径:
启动Clojure CLI时,用-cp参数把当前目录(.)加入类路径:clj -cp .这样
io/resource就能识别当前目录下的file.txt。
内容的提问来源于stack exchange,提问作者Laura Bieber
相关产品推荐
相关产品推荐

