如果我想用 clojure 开发一个独立的 jar,应该把要处理的文件放在哪里?

Where to place the files to be processed if I want to develop a standalone jar with clojure?

我想编写一个独立的 clojure 程序来处理当前工作目录下的所有 html 文件。

(println file-seq (io/file "."))

如果我使用上面的代码,它在打包为 jar 时有效。但是在开发过程中,我应该把 html 文件放在哪里?在 src/../core.clj 文件夹内?我没有检查文件是否有效等。所以如果我放在 src 下,它也会尝试处理 clj 文件。有没有什么逻辑上没有太大变化的更好的方法?

这取决于您启动 Java 处理 运行 您的 Clojure 代码的目录。

如果使用构建工具(例如 lein 或 boot)的 运行 REPL 或代码或测试,它是项目的顶级目录(例如带有 project.clj 或 [=23 的目录) =]).

您也可以通过记录“.”的绝对路径来查看。文件:

(println (.getAbsolutePath (io/file "."))) 

至于对文件操作代码的测试,最好使用基本目录参数对函数进行参数化,并在调用应用程序时使用当前目录 (.) 调用该函数 (例如,通过 -main 函数)或传递为测试准备的存根目录。您可以在项目中的 test-resources 下为不同的测试场景(如空目录、嵌套目录等)配置多个测试目录,并使用特定场景目录作为参数调用您的函数。

我建议使用“.”从命令行读取根目录。作为默认值:

(ns clj.core
  (:require
    [clojure.java.io :as io]
  )
  (:gen-class))

(defn -main [& args]
  (let [search-path (or (first args)  ".")
        file-seq    (file-seq (io/file search-path))
       ]
    (doseq [curr-file file-seq]
      (println curr-file))))

~/clj > lein run src      # search-path => "src"
#object[java.io.File 0x5adc71e7 src]
#object[java.io.File 0x7fc5a558 src/clj]
#object[java.io.File 0x42fd8f2f src/clj/.core.clj.swp]
#object[java.io.File 0x7eea934d src/clj/core.clj]

~/clj > lein run     # search-path => "."
#object[java.io.File 0x1fc4483f .]
#object[java.io.File 0x1d7af82 ./README.md]
#object[java.io.File 0x5adc71e7 ./.lein-failures]
#object[java.io.File 0x7fc5a558 ./project.clj]
.....