在 Clojure 中需要命名空间时出现 FileNotFoundException
FileNotFoundException when requiring namespaces in Clojure
我想在我的应用中使用 clojure.java.io
和 clojure.data.csv
。
这就是我需要这些命名空间的方式:
(ns my-app.core
(:gen-class)
(:require [clojure.java.io :as io]
[clojure.data.csv :as csv]))
当我在 REPL 中计算 ns
函数时,我得到这个错误:
; Execution error (FileNotFoundException) at my-app.core/eval8295$loading (form-init1647489175359256060.clj:1).
; Could not locate clojure/data/csv__init.class, clojure/data/csv.clj or clojure/data/csv.cljc on classpath.
VS 代码 v1.62.3/Calva。 v2.0.229 / Leiningen v2.9.8 on Java v15.0.1 / macOS v11.6.1
这是我的 Java class 路径,在同一 REPL 会话中通过调用 (java.lang.System/getProperty "java.class.path")
:
生成
"/Users/my-username/Code/my-app/test:/Users/my-username/Code/my-app/src:/Users/my-username/Code/my-app/dev-resources:/Users/my-username/Code/my-app/resources:/Users/my-username/Code/my-app/target/default/classes:/Users/my-username/.m2/repository/cider/cider-nrepl/0.22.4/cider-nrepl-0.22.4.jar:/Users/my-username/.m2/repository/nrepl/nrepl/0.8.3/nrepl-0.8.3.jar:/Users/my-username/.m2/repository/org/clojure/clojure/1.10.3/clojure-1.10.3.jar:/Users/my-username/.m2/repository/org/clojure/spec.alpha/0.2.194/spec.alpha-0.2.194.jar:/Users/my-username/.m2/repository/org/clojure/core.specs.alpha/0.2.56/core.specs.alpha-0.2.56.jar:/Users/my-username/.m2/repository/org/nrepl/incomplete/0.1.0/incomplete-0.1.0.jar"
这是我的应用程序目录结构(使用 lein new app my-app
脚手架):
.
├── CHANGELOG.md
├── LICENSE
├── README.md
├── doc
│ └── intro.md
├── project.clj
├── resources
│ ├── my-data-1.csv
│ └── my-data-2.csv
├── src
│ └── my_app
│ └── core.clj
├── target
│ └── default
│ ├── classes
│ │ └── META-INF
│ │ └── maven
│ │ └── my-app
│ │ └── my-app
│ │ └── pom.properties
│ ├── repl-port
│ └── stale
│ └── leiningen.core.classpath.extract-native-dependencies
└── test
└── my_app
└── core_test.clj
看来我的 Java 环境或 Clojure 安装有问题。我似乎无法弄清楚问题出在哪里,以及如何解决它。
如有任何建议,我们将不胜感激。
我忘记将 clojure.data.csv
添加到我的 project.clj
文件中。
这里是 project.clj
并应用了 :dependencies
的更改:
(defproject my-app "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0"
:url "https://www.eclipse.org/legal/epl-2.0/"}
:dependencies [[org.clojure/clojure "1.10.3"]
[org.clojure/data.csv "1.0.0"]]
:main ^:skip-aot my-app.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all
:jvm-opts ["-Dclojure.compiler.direct-linking=true"]}})
相关部分:
:dependencies [[org.clojure/clojure "1.10.3"]
[org.clojure/data.csv "1.0.0"]]
现在可以正常使用了。
我想在我的应用中使用 clojure.java.io
和 clojure.data.csv
。
这就是我需要这些命名空间的方式:
(ns my-app.core
(:gen-class)
(:require [clojure.java.io :as io]
[clojure.data.csv :as csv]))
当我在 REPL 中计算 ns
函数时,我得到这个错误:
; Execution error (FileNotFoundException) at my-app.core/eval8295$loading (form-init1647489175359256060.clj:1).
; Could not locate clojure/data/csv__init.class, clojure/data/csv.clj or clojure/data/csv.cljc on classpath.
VS 代码 v1.62.3/Calva。 v2.0.229 / Leiningen v2.9.8 on Java v15.0.1 / macOS v11.6.1
这是我的 Java class 路径,在同一 REPL 会话中通过调用 (java.lang.System/getProperty "java.class.path")
:
"/Users/my-username/Code/my-app/test:/Users/my-username/Code/my-app/src:/Users/my-username/Code/my-app/dev-resources:/Users/my-username/Code/my-app/resources:/Users/my-username/Code/my-app/target/default/classes:/Users/my-username/.m2/repository/cider/cider-nrepl/0.22.4/cider-nrepl-0.22.4.jar:/Users/my-username/.m2/repository/nrepl/nrepl/0.8.3/nrepl-0.8.3.jar:/Users/my-username/.m2/repository/org/clojure/clojure/1.10.3/clojure-1.10.3.jar:/Users/my-username/.m2/repository/org/clojure/spec.alpha/0.2.194/spec.alpha-0.2.194.jar:/Users/my-username/.m2/repository/org/clojure/core.specs.alpha/0.2.56/core.specs.alpha-0.2.56.jar:/Users/my-username/.m2/repository/org/nrepl/incomplete/0.1.0/incomplete-0.1.0.jar"
这是我的应用程序目录结构(使用 lein new app my-app
脚手架):
.
├── CHANGELOG.md
├── LICENSE
├── README.md
├── doc
│ └── intro.md
├── project.clj
├── resources
│ ├── my-data-1.csv
│ └── my-data-2.csv
├── src
│ └── my_app
│ └── core.clj
├── target
│ └── default
│ ├── classes
│ │ └── META-INF
│ │ └── maven
│ │ └── my-app
│ │ └── my-app
│ │ └── pom.properties
│ ├── repl-port
│ └── stale
│ └── leiningen.core.classpath.extract-native-dependencies
└── test
└── my_app
└── core_test.clj
看来我的 Java 环境或 Clojure 安装有问题。我似乎无法弄清楚问题出在哪里,以及如何解决它。
如有任何建议,我们将不胜感激。
我忘记将 clojure.data.csv
添加到我的 project.clj
文件中。
这里是 project.clj
并应用了 :dependencies
的更改:
(defproject my-app "0.1.0-SNAPSHOT"
:description "FIXME: write description"
:url "http://example.com/FIXME"
:license {:name "EPL-2.0 OR GPL-2.0-or-later WITH Classpath-exception-2.0"
:url "https://www.eclipse.org/legal/epl-2.0/"}
:dependencies [[org.clojure/clojure "1.10.3"]
[org.clojure/data.csv "1.0.0"]]
:main ^:skip-aot my-app.core
:target-path "target/%s"
:profiles {:uberjar {:aot :all
:jvm-opts ["-Dclojure.compiler.direct-linking=true"]}})
相关部分:
:dependencies [[org.clojure/clojure "1.10.3"]
[org.clojure/data.csv "1.0.0"]]
现在可以正常使用了。